﻿/****** Object:  StoredProcedure [dbo].[sp_EstActVA_Grouping_Web]    Script Date: 02/05/2024 11:07:44 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_EstActVA_Grouping_Web]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_EstActVA_Grouping_Web] AS' 
END
GO



ALTER PROCEDURE [dbo].[sp_EstActVA_Grouping_Web]
@AcademicYearID VARCHAR(5),
@Grouping1 VARCHAR(max), 
@Grouping2 VARCHAR(max), 
@Grouping3 VARCHAR(max), 
@Grouping4 VARCHAR(max),
@SavedViewID INTEGER,
@Grouping1Filter VARCHAR(max) = NULL

AS
--line 969

--exec sp_EstActVA_Grouping_web '19/20','CourseCode','CourseTitle','''''','''''',22
--exec sp_EstActVA_Grouping_web '19/20','EnrolmentUserDefinedNumber2','''''','''''','''''',0
--exec sp_EstActVA_Grouping_web '19/20','StudentUserDefinedNumber2','EnrolmentUserDefinedNumber','''''','''''',0
--exec sp_EstActVA_Grouping_web '23/24','TeachingGroupCode','''''','''''','''''',22,'Q41AMG'
--exec sp_EstActVA_Grouping_web '23/24','CourseCode','''''','''''','''''',22

-- =============================================
-- Author:		Andrew Genner
-- Create date: AMG 23/04/2020 v1.22.0
-- Descripton:	SP is the same as sp_EstActVA_Grouping - Speeded up by using CASE statements to only do the calculations that are 
--				necessary and stripped out approx 30% of the fields we are not going to be showing in web
-- Modified:	AMG 16/06/2022 v1.32
-- Description:	Added InYear Points 9 - 12
--				Added in GroupingIYMostRecent_vs_RecentTarget_NationalBanding and GroupingEnrolmentGradeVAScore_vs_MostRecent_NationalBanding
-- Modified:	AMG 20/10/2023 v1.36
-- Description:	Added @AcademicYearID into the @SQL1 dynamic SQL to populate #tStudent
-- Modified:	AMG 23/11/2023
-- Description:	Added UniqueStudentCount so we can calculate the Average QOE score PER STUDENT, not based on average of all Enrolments.
-- Modified:	AMG 04/12/2023
-- Description:	This wasn't working for Manually Created Groups, so now it uses the OriginalCourseID to work out which EstActVA records it needs.
-- Modified:	AMG 09/01/2024 v1.36.0
-- Description: The PARTITION on the UniqueStudentCount wasn't including the "QualificationType" - now corrected
-- Modified:	AMG 23/01/2024 v1.37
-- Description:	When "TeachingGroupCode" is passed through, it always fills #TempIDs table now to better handle Adhoc Groups.
-- Modified:	AMG 30/04/2024 v1.38
-- Description:	Added in the columns: CountofEnrolsWithIYPoints, CountofEnrolsWithMissingIYPoints, CountofEnrolsWithEnrolmentPoints, CountofEnrolsWithMissingEnrolPoints
-- =============================================

--DROP TABLE  #TempIDs
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @Grouping1 VARCHAR(max)
--DECLARE @Grouping2 VARCHAR(max)
--DECLARE @Grouping3 VARCHAR(max)
--DECLARE @Grouping4 VARCHAR(max)
--DECLARE @SavedViewID INTEGER
--DECLARE @Grouping1Filter VARCHAR(max) = NULL
--SELECT @Grouping1 = 'CourseCode'
--SELECT @Grouping2 = ''''''
--SELECT @Grouping3 = ''''''
--SELECT @Grouping4 = ''''''
--SELECT @AcademicYearID = '19/20'
--SELECT @SavedViewID = 22
--SELECT @Grouping1Filter = 'Q50DCBY2-23/24'

DECLARE @Filter AS VARCHAR(max)

-- First of All, build the Filter String - if one has been passed through
-- ********************************
	SELECT @Filter = ''
	DECLARE @Expression VARCHAR(max)

	DECLARE cur CURSOR FOR
	--Select all the visible Academic Years
	SELECT  
		System_SavedView_Filter.Expression 
	FROM    
		System_SavedView_Filter
	WHERE 
		System_SavedView_Filter.SavedViewID = @SavedViewID

				--Loop through the Academic Years and populate EstActVA
				OPEN cur
				FETCH NEXT FROM cur INTO @Expression

				WHILE @@FETCH_STATUS = 0 
					BEGIN

						SELECT @Filter = @Filter + 	' AND ' + REPLACE(@Expression,'*','%') --REPLACE(@Expression,'''','''''''')
				
					FETCH NEXT FROM cur INTO @Expression

					END

				CLOSE cur
				DEALLOCATE cur

-- ********************************
--Now we have the filter string, carry on...

DECLARE @Grouping1FilterString AS VARCHAR(max)
SELECT @Grouping1FilterString = ''

--If the @GroupingFilter is not NULL and we have a Grouping1, then act normally
IF (@Grouping1 <> 'TeachingGroupCode') AND (@Grouping1Filter IS NOT NULL)
BEGIN
	SELECT @Grouping1FilterString = CASE WHEN @Grouping1Filter IS NULL THEN '' ELSE ' AND ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') = ''' + @Grouping1Filter + '''' END
END

------If the @Grouping1 is 'TeachingGroupCode' and we can get records directly from EstActVA, then act normally
----IF @Grouping1 = 'TeachingGroupCode' AND ( (SELECT COUNT(ID) FROM EstActVA WHERE TeachingGroupCode = @Grouping1Filter AND AcademicYearID = @AcademicYearID) > 0 OR @Grouping1Filter IS NULL)
----BEGIN
----	SELECT @Grouping1FilterString = CASE WHEN @Grouping1Filter IS NULL THEN '' ELSE ' AND ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') = ''' + @Grouping1Filter + '''' END
----END

DECLARE @Grouping1INNERJOINString AS VARCHAR(max)
SELECT @Grouping1INNERJOINString = ''

--If the @Grouping1 is 'TeachingGroupCode' and records aren't retrieved direct from EstActVA, it means we have a manual group
--and we have to go looking for the relevant records...
IF @Grouping1 = 'TeachingGroupCode' /*AND (SELECT COUNT(ID) FROM EstActVA WHERE TeachingGroupCode = @Grouping1Filter AND AcademicYearID = @AcademicYearID) = 0*/ AND @Grouping1Filter IS NOT NULL
BEGIN
	--Load up a #Temp table with IDs that we need for enrolments in a Manual Group.  This uses the OriginalCourseID to get the correct EstActVA.IDs
			SELECT 
			EstActVA.ID
			INTO #TempIDs
			FROM
				(
					SELECT 
					OGP_Enrolment.StudentRef,
					Course.CourseCode,
					OGP_Group.AcademicYearID AS AcademicYearID
					FROM
					OGP_Enrolment
					INNER JOIN OGP_GroupEnrolment
					ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
					INNER JOIN OGP_Group
					ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					INNER JOIN Course
					ON Course.ID = OGP_Enrolment.OriginalCourseID
					WHERE OGP_Enrolment.RecordStatus <> 'Obsolete'
					AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
					AND OGP_Group.RecordStatus <> 'Obsolete'
					AND OGP_Group.OGP_GroupCode = @Grouping1Filter AND OGP_Group.OGP_TypeCode = 'VA' AND OGP_Group.AcademicYearID = @AcademicYearID
				) t
			INNER JOIN EstActVA
			ON EstActVA.StudentRef = t.StudentRef
			AND EstActVA.CourseCode = t.CourseCode
			AND EstActVA.AcademicYearID = t.AcademicYearID
	--Form an "INNER JOIN #Temp ON EstActVA.ID = #Temp.ID" statement for manual groups - we'll use this later when populating #Temp
	SELECT @Grouping1INNERJOINString = ' INNER JOIN #TempIDs ON EstActVA.ID = #TempIDs.ID ' 

END


SELECT @Filter = ISNULL(@Filter,'') + @Grouping1FilterString


--SELECT @Filter
--SELECT @Grouping1INNERJOINString


DECLARE @SQL1 VARCHAR(Max)
DECLARE @SQL2 VARCHAR(Max)


SELECT @SQL1 = ''
SELECT @SQL2 = ''
--SELECT @Filter = 'AND Size = 1.0 AND Cohort = ''A Level'''


--Calculate the AcademicYear from where we are going to pull the National Progress Data
DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

DECLARE @AcademicYearID_NationalProgress VARCHAR(5)
SELECT @AcademicYearID_NationalProgress = (
											SELECT MAX(NationalProgress.AcademicYearID) 
											FROM NationalProgress 
											INNER JOIN AcademicYear 
												ON NationalProgress.AcademicYearID = AcademicYear.AcademicYearID
											WHERE AcademicYear.AcademicYearNo <= @AcademicYearNo
										)

--IF OBJECT_ID('tempdb..#tStudent','U') IS NOT NULL DROP TABLE #tStudent
--IF OBJECT_ID('tempdb..#Temp','U') IS NOT NULL DROP TABLE #Temp
--IF OBJECT_ID('tempdb..#TempFinal','U') IS NOT NULL DROP TABLE #TempFinal

/*
--No longer needed 23/11/2023 because We do UniqueStudentCount using a partition instead
CREATE TABLE #tStudent(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	AcademicYearID [varchar](5) NULL,
	VA_Type [varchar](50) NULL,
	Cohort [varchar](120) NULL,
	CA_QualTypeID [INT] NULL,
	QualificationID [INT] NULL,
	OfqualGradingScheme [varchar](100) NULL,
	Grouping1 [varchar](1000) NULL,
	Grouping2 [varchar](1000) NULL,
	Grouping3 [varchar](1000) NULL,
	Grouping4 [varchar](1000) NULL,
	CountOfStudent [int] NULL
	) 
*/
CREATE TABLE #Temp(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	AcademicYearID [varchar](5) NULL,
	Grouping1 [varchar](1000) NULL,
	Grouping2 [varchar](1000) NULL,
	Grouping3 [varchar](1000) NULL,
	Grouping4 [varchar](1000) NULL,
	CountOfEnrol [int] NULL,
	UniqueStudentCount [int] NULL,
	CtQOEPts_Coll [int] NULL,
	CtQOEPts_GCSE_Coll [int] NULL,
	--CtQOEPts_Fin [int] NULL,
	--CtQOEPts_GCSE_Fin [int] NULL,
	--[EstPoints_AcYrmin3] [decimal](19,14) NULL,
	--[EstPoints_AcYrMin2] [decimal](19,14) NULL,
	--[EstPoints_AcYrMin1] [decimal](19,14) NULL,
	--[VAScore_vs_Orig] [decimal](19,14) NULL,		--
	--[VAScore_vs_Adj] [decimal](19,14) NULL,			--
	--[VAScore_L3VAStu] [decimal](19,14) NULL,		--
	--[EstPoints_L3VAStu] [decimal](19,14) NULL,
	--[ActPoints_L3VAStu] [decimal](19,2) NULL,
	--EnrolmentGradeVAScore_vs_Orig [decimal](19,14) NULL,		--
	--EnrolmentGradeVAScore_vs_Adj [decimal](19,14) NULL,			--
	[QOEPoints_College] [decimal](19,14) NULL,
	[QOEPoints_GCSE_College] [decimal](19,14) NULL,
	--[QOEPoints_Final] [decimal](19,14) NULL,
	--[QOEPoints_GCSE_Final] [decimal](19,14) NULL,
	Size [decimal](19,2) NULL,
	VA_Type [varchar](50) NULL,
	Cohort [varchar](120) NULL,
	IYMostRecentPoints [decimal](19,2) NULL,
	--IYMostRecent_vs_Orig [decimal](19,14) NULL,
	--IYMostRecent_vs_Adj [decimal](19,14) NULL,
	IYMostRecent_vs_RecentTarget [decimal](19,14) NULL,		--
	Point1_Points [decimal](19,2) NULL,
	Point2_Points [decimal](19,2) NULL,
	Point3_Points [decimal](19,2) NULL,
	Point4_Points [decimal](19,2) NULL,
	Point5_Points [decimal](19,2) NULL,
	Point6_Points [decimal](19,2) NULL,
	Point7_Points [decimal](19,2) NULL,
	Point8_Points [decimal](19,2) NULL,
	Point9_Points [decimal](19,2) NULL,
	Point10_Points [decimal](19,2) NULL,
	Point11_Points [decimal](19,2) NULL,
	Point12_Points [decimal](19,2) NULL,
	Point1_vs_MostRecent [decimal](19,14) NULL,
	Point2_vs_MostRecent [decimal](19,14) NULL,
	Point3_vs_MostRecent [decimal](19,14) NULL,
	Point4_vs_MostRecent [decimal](19,14) NULL,
	Point5_vs_MostRecent [decimal](19,14) NULL,
	Point6_vs_MostRecent [decimal](19,14) NULL,
	Point7_vs_MostRecent [decimal](19,14) NULL,
	Point8_vs_MostRecent [decimal](19,14) NULL,
	Point9_vs_MostRecent [decimal](19,14) NULL,
	Point10_vs_MostRecent [decimal](19,14) NULL,
	Point11_vs_MostRecent [decimal](19,14) NULL,
	Point12_vs_MostRecent [decimal](19,14) NULL,
	MostRecentCollegeEstPoints [decimal](19,14) NULL,
	VAScore_vs_MostRecent [decimal](19,14) NULL,			--
	--EnrolmentGradeVAScore_vs_AcYr [decimal](19,14) NULL,	--
	EnrolmentGradeVAScore_vs_MostRecent [decimal](19,14) NULL,		--
	EnrolmentPoints [decimal](19,2) NULL,
	QualificationID [int] NULL,
	CA_QualTypeID [int] NULL,
	OfqualGradingScheme [varchar](255) NULL,
	IYMostRecentGradeNo [int] NULL,
	IYPoint1GradeNo [int] NULL,
	IYPoint2GradeNo [int] NULL,
	IYPoint3GradeNo [int] NULL,
	IYPoint4GradeNo [int] NULL,
	IYPoint5GradeNo [int] NULL,
	IYPoint6GradeNo [int] NULL,
	IYPoint7GradeNo [int] NULL,
	IYPoint8GradeNo [int] NULL,
	IYPoint9GradeNo [int] NULL,
	IYPoint10GradeNo [int] NULL,
	IYPoint11GradeNo [int] NULL,
	IYPoint12GradeNo [int] NULL,
	MostRecentCollegeGradeNo [int] NULL,
	--[EstPoints_AcYr] [decimal](19,14) NULL
	CtEnrIYPts [int] NULL,
	CtEnrEnrolmentPts [int] NULL
	) 
	--failed idea - joining on varchars seems to be quicker than ints!
	--Get the Groupings into tables with ID Numbers - we only need to join on the IDs (INT) rather than the varchars (should be quicker)
	--CREATE TABLE #TempGrouping1(
	--[ID] [int] NOT NULL,
	--Grouping1 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping2(
	--[ID] [int] NOT NULL,
	--Grouping2 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping3(
	--[ID] [int] NOT NULL,
	--Grouping3 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping4(
	--[ID] [int] NOT NULL,
	--Grouping4 [varchar](1000) NULL,
	--)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping1)  AS ID, T.Grouping1 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') AS Grouping1 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping1 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping2)  AS ID, T.Grouping2 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping2 AS VARCHAR(100)) + ','''') AS Grouping2 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping2 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping3)  AS ID, T.Grouping3 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping3 AS VARCHAR(100)) + ','''') AS Grouping3 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping3 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping4)  AS ID, T.Grouping4 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping4 AS VARCHAR(100)) + ','''') AS Grouping4 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping4 exec (@SQL1)


SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	ISNULL( CAST('+@Grouping1+' AS VARCHAR(100)),'''') AS Grouping1,
	ISNULL( CAST('+@Grouping2+' AS VARCHAR(100)),'''') AS Grouping2,
	ISNULL( CAST('+@Grouping3+' AS VARCHAR(100)),'''') AS Grouping3,
	ISNULL( CAST('+@Grouping4+' AS VARCHAR(100)),'''') AS Grouping4,
	--(SELECT ID FROM #TempGrouping1 WHERE Grouping1 = ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''')) AS Grouping1Num,
	--(SELECT ID FROM #TempGrouping2 WHERE Grouping2 = ISNULL(' + CAST(@Grouping2 AS VARCHAR(100)) + ','''')) AS Grouping2Num,
	--(SELECT ID FROM #TempGrouping3 WHERE Grouping3 = ISNULL(' + CAST(@Grouping3 AS VARCHAR(100)) + ','''')) AS Grouping3Num,
	--(SELECT ID FROM #TempGrouping4 WHERE Grouping4 = ISNULL(' + CAST(@Grouping4 AS VARCHAR(100)) + ','''')) AS Grouping4Num,
	1 As CountOfEnrol,--Count(ID) As CountOfEnrol,
	CASE ROW_NUMBER() OVER (PARTITION BY AcademicYearID, StudentRef, VA_Type, Cohort, 
	
			CASE VA_Type 
				WHEN ''CA'' THEN (SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = CA_QualTypeID)
				WHEN ''Pass Only'' THEN  ''Pass Only''
				WHEN ''Ofqual Graded'' THEN OfqualGradingScheme
				WHEN ''NoGrade'' THEN ''NoGrade'' 
				WHEN ''L3VA'' THEN (SELECT QualificationLookup.QualificationDescription FROM QualificationLookup WHERE QualificationLookup.ID = QualificationID)
				ELSE NULL
			END,

	ISNULL( CAST('+@Grouping1+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping2+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping3+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping4+' AS VARCHAR(100)),'''') ORDER BY AcademicYearID, StudentRef DESC) WHEN 1 THEN 1 ELSE 0 END AS UniqueStudentCount,
	(CASE WHEN QOEPoints_College IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_Coll,
	(CASE WHEN QOEPoints_GCSE_College IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_GCSE_Coll,
	--(CASE WHEN QOEPoints_Final IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_Fin,
	--(CASE WHEN QOEPoints_GCSE_Final IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_GCSE_Fin,
	--[EstPoints_AcYrmin3],
	--[EstPoints_AcYrMin2],
	--[EstPoints_AcYrMin1],
	--[VAScore_vs_Orig],
	--[VAScore_vs_Adj],
	--[VAScore_L3VAStu],

	--[EstPoints_L3VAStu],
	--[ActPoints_L3VAStu],

	--EnrolmentGradeVAScore_vs_Orig,
	--EnrolmentGradeVAScore_vs_Adj,
	[QOEPoints_College],
	[QOEPoints_GCSE_College],
	--[QOEPoints_Final],
	--[QOEPoints_GCSE_Final],
	(CASE WHEN Cohort IN (''Pass Only'', ''Ofqual Graded'', ''NoGrade'') THEN 1 ELSE Size END) AS Size,
	VA_Type,
	Cohort,
	IYMostRecentPoints,
	--IYMostRecent_vs_Orig,	
	--IYMostRecent_vs_Adj,
	IYMostRecent_vs_RecentTarget,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	Point1_vs_MostRecent,
	Point2_vs_MostRecent,
	Point3_vs_MostRecent,
	Point4_vs_MostRecent,
	Point5_vs_MostRecent,
	Point6_vs_MostRecent,
	Point7_vs_MostRecent,
	Point8_vs_MostRecent,
	Point9_vs_MostRecent,
	Point10_vs_MostRecent,
	Point11_vs_MostRecent,
	Point12_vs_MostRecent,
	MostRecentCollegeEstPoints,
	VAScore_vs_MostRecent,
	--EnrolmentGradeVAScore_vs_AcYr,
	EnrolmentGradeVAScore_vs_MostRecent,
	EnrolmentPoints,
	CASE VA_Type WHEN ''L3VA'' THEN QualificationID ELSE NULL END AS QualificationID,
	CASE VA_Type WHEN ''CA'' THEN CA_QualTypeID ELSE NULL END AS CA_QualTypeID,
	CASE VA_Type WHEN ''Ofqual Graded'' THEN OfqualGradingScheme ELSE '''' END AS OfqualGradingScheme,

	CASE WHEN IYMostRecentPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)		
		WHEN VA_Type = ''CA'' THEN 
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, IYMostRecentPoints, Cohort)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(IYMostRecentPoints)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, IYMostRecentPoints)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(IYMostRecentPoints)
		END 
	END
	AS IYMostRecentGradeNo,

	CASE WHEN Point1_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point1_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point1_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point1_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point1_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point1_Points)
		END 
	END
	AS IYPoint1GradeNo,

	CASE WHEN Point2_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point2_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point2_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point2_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point2_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point2_Points)
		END 
	END
	AS IYPoint2GradeNo,

	CASE WHEN Point3_Points  IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point3_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point3_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point3_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point3_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point3_Points)
		END 
	END
	AS IYPoint3GradeNo,

	CASE WHEN Point4_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point4_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point4_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point4_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point4_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point4_Points)
		END 
	END
	AS IYPoint4GradeNo,

	CASE WHEN Point5_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point5_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point5_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point5_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point5_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point5_Points)
		END 
	END
	AS IYPoint5GradeNo,

	CASE WHEN Point6_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point6_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point6_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point6_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point6_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point6_Points)
		END 
	END
	AS IYPoint6GradeNo,

	CASE WHEN Point7_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point7_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point7_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point7_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point7_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point7_Points)
		END 
	END
	AS IYPoint7GradeNo,

	CASE WHEN Point8_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point8_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point8_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point8_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point8_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point8_Points)
		END
	END
	AS IYPoint8GradeNo,

	CASE WHEN Point9_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point9_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point9_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point9_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point9_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point9_Points)
		END
	END
	AS IYPoint9GradeNo,

	CASE WHEN Point10_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point10_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point10_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point10_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point10_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point10_Points)
		END
	END
	AS IYPoint10GradeNo,

	CASE WHEN Point11_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point11_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point11_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point11_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point11_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point11_Points)
		END
	END
	AS IYPoint11GradeNo,

	CASE WHEN Point12_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point12_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point12_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point12_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point12_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point12_Points)
		END
	END
	AS IYPoint12GradeNo,
	
	CASE WHEN MostRecentCollegeEstPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(MostRecentCollegeEstPoints)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, MostRecentCollegeEstPoints, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, MostRecentCollegeEstPoints)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(MostRecentCollegeEstPoints)
		END 
	END 
	AS MostRecentCollegeGradeNo,
	(CASE WHEN IYMostRecentPoints IS NULL THEN 0 ELSE 1 END) AS CtEnrIYPts,
	(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) AS CtEnrEnrolmentPts
	--EstPoints_AcYr

	FROM
	EstActVA ' + @Grouping1INNERJOINString + '
	WHERE AcademicYearID = ''' + @AcademicYearID + '''
	' + @Filter + '

	'
	--print @SQL1
	INSERT INTO #Temp exec (@SQL1)

	--select * from #Temp where Grouping1 = 'R209'
	--*****************************************************

/*
--No longer needed 23/11/2023 because We do UniqueStudentCount using a partition instead

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) < 1 
BEGIN

	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	'''' AS Grouping2Num,
	'''' AS Grouping3Num,
	'''' AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + '
			FROM EstActVA ' + @Grouping1INNERJOINString + '
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + '
	'
END 

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) < 1 
BEGIN
--2
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	'''' AS Grouping3Num,
	'''' AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + '
			FROM EstActVA  ' + @Grouping1INNERJOINString + '
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID,VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + '
	'
END

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) > 0 AND LEN(REPLACE(@Grouping4,'''','')) < 1 
BEGIN
--3
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	COALESCE(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS Grouping3,
	NULL AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + ',
			ISNULL(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS ' + @Grouping3 + '
			FROM EstActVA
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + ' , ' + @Grouping3 + '
	'
END

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) > 0 AND LEN(REPLACE(@Grouping4,'''','')) > 0 
BEGIN
--4
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	COALESCE(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS Grouping3,
	COALESCE(CAST(' + @Grouping4 + ' AS VARCHAR(100)),'''') AS Grouping4,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + ',
			ISNULL(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS ' + @Grouping3 + ',
			ISNULL(CAST(' + @Grouping4 + ' AS VARCHAR(100)),'''') AS ' + @Grouping4 + '
			FROM EstActVA
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + ' , ' + @Grouping3 + ' , ' + @Grouping4 + '
	'
END

	--print @SQL1
	INSERT INTO #tStudent exec (@SQL1)

--	Select * FROM #tStudent
--	--********************************************
*/

	--NOTE: Size is taken into account for VA calcs
	--Size is not taken into account for Avg Grade/Points

	SELECT 
	CAST(ROW_NUMBER() OVER (ORDER BY AcademicYearID) AS INT) AS ID,
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	LEFT(ISNULL(Grouping1,''), 100) AS Grouping1,
	LEFT(ISNULL(Grouping2,''), 100) AS Grouping2,
	LEFT(ISNULL(Grouping3,''), 100) AS Grouping3,
	LEFT(ISNULL(Grouping4,''), 100) AS Grouping4,
	--#Temp.Grouping1Num,
	--#Temp.Grouping2Num,
	--#Temp.Grouping3Num,
	--#Temp.Grouping4Num,
	Sum(CountOfEnrol) AS CountOfEnrol,

	--The UniqueStudentCount is a 1 or a 0.  The 1 is placed against the first EstActVA record it comes across for a student, 0 against all others.  Therefore the QOE average can be worked out PER STUDENT
	CASE WHEN Sum(CtQOEPts_Coll*UniqueStudentCount) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_College]*UniqueStudentCount) / Sum(CtQOEPts_Coll*UniqueStudentCount) AS Decimal(19,2)) END AS GroupingQOEPoints_College,
	Sum([QOEPoints_College]*UniqueStudentCount) AS GroupingQOEPoints_College_Dividend,
	Sum(CtQOEPts_Coll*UniqueStudentCount) AS GroupingQOEPoints_College_Divisor,

	CASE WHEN Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_GCSE_College]*UniqueStudentCount) / Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) AS Decimal(19,2)) END AS GroupingQOEPoints_GCSE_College,
	Sum([QOEPoints_GCSE_College]*UniqueStudentCount) AS GroupingQOEPoints_GCSE_College_Dividend,
	Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) AS GroupingQOEPoints_GCSE_College_Divisor,

	--CASE WHEN Sum(CtQOEPts_Fin) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_Final]) / Sum(CtQOEPts_Fin) AS Decimal(19,2)) END AS GroupingQOEPoints_Final,
	--Sum([QOEPoints_Final]) AS GroupingQOEPoints_Final_Dividend,
	--Sum(CtQOEPts_Fin) AS GroupingQOEPoints_Final_Divisor,

	--CASE WHEN Sum(CtQOEPts_GCSE_Fin) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_GCSE_Final]) / Sum(CtQOEPts_GCSE_Fin) AS Decimal(19,2)) END AS GroupingQOEPoints_GCSE_Final,
	--Sum([QOEPoints_GCSE_Final]) AS GroupingQOEPoints_GCSE_Final_Dividend,
	--Sum(CtQOEPts_GCSE_Fin) AS GroupingQOEPoints_GCSE_Final_Divisor,

	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin3]) / Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin3,
	--CAST(Sum([EstPoints_AcYrmin3]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin3_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin3_Divisor,
	
	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin2]) / Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin2,
	--CAST(Sum([EstPoints_AcYrmin2]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin2_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin2_Divisor,
	
	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin1]) / Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin1,
	--CAST(Sum([EstPoints_AcYrmin1]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin1_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin1_Divisor,

	--CASE WHEN Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_vs_Orig]) / Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingVAScore_vs_Orig,
	--CAST(Sum([VAScore_vs_Orig]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_Orig_Dividend,
	--Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_Orig_Divisor,
	
	--CASE WHEN Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_vs_Adj]) / Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingVAScore_vs_Adj,
	--CAST(Sum([VAScore_vs_Adj]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_Adj_Dividend,
	--Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_Adj_Divisor,
	
	--CASE WHEN Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_L3VAStu]) / Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) --HERE! --Need to only /Size when the divisor is not null!
	--	END AS GroupingVAScore_L3VAStu,
	--CAST(Sum([VAScore_L3VAStu]) AS DECIMAL(19,14)) AS GroupingVAScore_L3VAStu_Dividend,
	--Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_L3VAStu_Divisor,
	--Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_L3VAStu_NumEnrols, --Work out the number of enrols that have DfE L3VA

	--CASE WHEN Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_L3VAStu]) / Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEstPoints_L3VAStu,
	--CAST(Sum([EstPoints_L3VAStu]) AS DECIMAL(19,14)) AS GroupingEstPoints_L3VAStu_Dividend,
	--Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_L3VAStu_Divisor,

	--CASE WHEN Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([ActPoints_L3VAStu]) / Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingActPoints_L3VAStu,
	--CAST(Sum([ActPoints_L3VAStu]) AS DECIMAL(19,14)) AS GroupingActPoints_L3VAStu_Dividend,
	--Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingActPoints_L3VAStu_Divisor,


	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_Orig]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_Orig,
	--CAST(Sum([EnrolmentGradeVAScore_vs_Orig]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_Orig_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_Orig_Divisor,

	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_Adj]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_Adj,
	--CAST(Sum([EnrolmentGradeVAScore_vs_Adj]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_Adj_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_Adj_Divisor,

	CASE WHEN Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([IYMostRecentPoints]) / Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingIYMostRecentPoints,
	CAST(Sum([IYMostRecentPoints]) AS DECIMAL(19,14)) AS GroupingIYMostRecentPoints_Dividend,
	Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecentPoints_Divisor,


	--CASE WHEN Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([IYMostRecent_vs_Orig]) / Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingIYMostRecent_vs_Orig,
	--CAST(Sum([IYMostRecent_vs_Orig]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_Orig_Dividend,
	--Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_Orig_Divisor,

	--CASE WHEN Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([IYMostRecent_vs_Adj]) / Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingIYMostRecent_vs_Adj,
	--CAST(Sum([IYMostRecent_vs_Adj]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_Adj_Dividend,
	--Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_Adj_Divisor,

	CASE WHEN Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([IYMostRecent_vs_RecentTarget]) / Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingIYMostRecent_vs_RecentTarget,
	CAST(Sum([IYMostRecent_vs_RecentTarget]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_RecentTarget_Dividend,
	Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_RecentTarget_Divisor,


	CASE WHEN Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point1_Points]) / Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint1Points,
	CAST(Sum([Point1_Points]) AS DECIMAL(19,14)) AS GroupingPoint1Points_Dividend,
	Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint1Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point2_Points]) / Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint2Points,
	CAST(Sum([Point2_Points]) AS DECIMAL(19,14)) AS GroupingPoint2Points_Dividend,
	Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint2Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point3_Points]) / Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint3Points,
	CAST(Sum([Point3_Points]) AS DECIMAL(19,14)) AS GroupingPoint3Points_Dividend,
	Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint3Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point4_Points]) / Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint4Points,
	CAST(Sum([Point4_Points]) AS DECIMAL(19,14)) AS GroupingPoint4Points_Dividend,
	Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint4Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point5_Points]) / Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint5Points,
	CAST(Sum([Point5_Points]) AS DECIMAL(19,14)) AS GroupingPoint5Points_Dividend,
	Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint5Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point6_Points]) / Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint6Points,
	CAST(Sum([Point6_Points]) AS DECIMAL(19,14)) AS GroupingPoint6Points_Dividend,
	Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint6Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point7_Points]) / Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint7Points,
	CAST(Sum([Point7_Points]) AS DECIMAL(19,14)) AS GroupingPoint7Points_Dividend,
	Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint7Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point8_Points]) / Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint8Points,
	CAST(Sum([Point8_Points]) AS DECIMAL(19,14)) AS GroupingPoint8Points_Dividend,
	Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint8Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point9_Points]) / Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint9Points,
	CAST(Sum([Point9_Points]) AS DECIMAL(19,14)) AS GroupingPoint9Points_Dividend,
	Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint9Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point10_Points]) / Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint10Points,
	CAST(Sum([Point10_Points]) AS DECIMAL(19,14)) AS GroupingPoint10Points_Dividend,
	Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint10Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point11_Points]) / Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint11Points,
	CAST(Sum([Point11_Points]) AS DECIMAL(19,14)) AS GroupingPoint11Points_Dividend,
	Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint11Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point12_Points]) / Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint12Points,
	CAST(Sum([Point12_Points]) AS DECIMAL(19,14)) AS GroupingPoint12Points_Dividend,
	Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint12Points_Divisor,

	CASE WHEN Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point1_vs_MostRecent]) / Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint1_vs_RecentTarget,
	CAST(Sum([Point1_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint1_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint1_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point2_vs_MostRecent]) / Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint2_vs_RecentTarget,
	CAST(Sum([Point2_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint2_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint2_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point3_vs_MostRecent]) / Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint3_vs_RecentTarget,
	CAST(Sum([Point3_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint3_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint3_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point4_vs_MostRecent]) / Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint4_vs_RecentTarget,
	CAST(Sum([Point4_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint4_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint4_vs_RecentTarget_Divisor,


		CASE WHEN Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point5_vs_MostRecent]) / Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint5_vs_RecentTarget,
	CAST(Sum([Point5_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint5_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint5_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point6_vs_MostRecent]) / Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint6_vs_RecentTarget,
	CAST(Sum([Point6_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint6_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint6_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point7_vs_MostRecent]) / Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint7_vs_RecentTarget,
	CAST(Sum([Point7_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint7_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint7_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point8_vs_MostRecent]) / Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint8_vs_RecentTarget,
	CAST(Sum([Point8_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint8_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint8_vs_RecentTarget_Divisor,


		CASE WHEN Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point9_vs_MostRecent]) / Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint9_vs_RecentTarget,
	CAST(Sum([Point9_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint9_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint9_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point10_vs_MostRecent]) / Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint10_vs_RecentTarget,
	CAST(Sum([Point10_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint10_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint10_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point11_vs_MostRecent]) / Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint11_vs_RecentTarget,
	CAST(Sum([Point11_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint11_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint11_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point12_vs_MostRecent]) / Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint12_vs_RecentTarget,
	CAST(Sum([Point12_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint12_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint12_vs_RecentTarget_Divisor,

	--AMG
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([MostRecentCollegeEstPoints]) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints,
	CAST(Sum([MostRecentCollegeEstPoints]) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_Divisor,

	CASE WHEN Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([VAScore_vs_MostRecent]) / Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingVAScore_vs_MostRecent,
	CAST(Sum([VAScore_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_MostRecent_Dividend,
	Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_MostRecent_Divisor,

	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_AcYr]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_AcYr,
	--CAST(Sum([EnrolmentGradeVAScore_vs_AcYr]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_AcYr_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_AcYr_Divisor,

	CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([EnrolmentGradeVAScore_vs_MostRecent]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingEnrolmentGradeVAScore_vs_MostRecent,
	CAST(Sum([EnrolmentGradeVAScore_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_MostRecent_Dividend,
	Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_MostRecent_Divisor,

	CASE WHEN Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([EnrolmentPoints]) / Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingEnrolmentPoints,
	CAST(Sum([EnrolmentPoints]) AS DECIMAL(19,14)) AS GroupingEnrolmentPoints_Dividend,
	Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentPoints_Divisor,

	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYr]) / Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYr,
	--CAST(Sum([EstPoints_AcYr]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYr_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYr_Divisor,

	/*
	CASE WHEN VA_Type = 'CA' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.CA_QualTypeID = #tStudent.CA_QualTypeID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'Pass Only' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.VA_Type = 'Pass Only' AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'L3VA' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.QualificationID = #tStudent.QualificationID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'Ofqual Graded' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.OfqualGradingScheme = #tStudent.OfqualGradingScheme AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'NoGrade' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.VA_Type = 'NoGrade' AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	ELSE
		NULL
	END AS CountOfStudent,
	*/
	SUM(UniqueStudentCount) AS CountOfStudent,

	--NULL AS CountofStudent1 --COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4 ),0) AS CountOfStudent1
	
	--STDEVP(MostRecentCollegeEstPoints) AS MostRecentCollegeEstPoints_STDEVP,
	--STDEVP(EnrolmentGradeVAScore_vs_MostRecent) AS EnrolmentGradeVAScore_vs_MostRecent_STDEVP,
	
	--STDEVP(IYMostRecent_vs_RecentTarget) AS IYMostRecent_vs_RecentTarget_STDEVP,
	--STDEVP(Point1_vs_MostRecent) AS Point1_vs_RecentTarget_STDEVP,
	--STDEVP(Point2_vs_MostRecent) AS Point2_vs_RecentTarget_STDEVP,
	--STDEVP(Point3_vs_MostRecent) AS Point3_vs_RecentTarget_STDEVP,
	--STDEVP(Point4_vs_MostRecent) AS Point4_vs_RecentTarget_STDEVP,
	--STDEVP(Point5_vs_MostRecent) AS Point5_vs_RecentTarget_STDEVP,
	--STDEVP(Point6_vs_MostRecent) AS Point6_vs_RecentTarget_STDEVP,
	--STDEVP(Point7_vs_MostRecent) AS Point7_vs_RecentTarget_STDEVP,
	--STDEVP(Point8_vs_MostRecent) AS Point8_vs_RecentTarget_STDEVP,

	--Added 13/06/2019 v1.13 / 1.14 Modified - only count MostRecentCollegeEstPoints when we have IY1, 2, 3, 4, Most Recent points:
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols,
	CAST(Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols,
	CAST(Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols,
	CAST(Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols,
	CAST(Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols,
	CAST(Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols_Divisor,
	
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols,
	CAST(Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols,
	CAST(Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols,
	CAST(Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols,
	CAST(Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols_Divisor,
	
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols,
	CAST(Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols,
	CAST(Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols,
	CAST(Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols,
	CAST(Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols_Divisor,

	Sum(CtEnrIYPts) AS CountofEnrolsWithIYPoints,
	SUM(CtEnrEnrolmentPts) AS CountofEnrolsWithEnrolmentPoints



	INTO
	#TempFinal

	FROM
	#Temp

	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID , QualificationID, OfqualGradingScheme, Grouping1 , Grouping2, Grouping3, Grouping4 



	--select * from #TempFinal



----****************************


	SELECT
	ID,
	AcademicYearID,
	VA_Type,
	Cohort,
	CASE VA_Type 
		WHEN 'CA' THEN (SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = CA_QualTypeID)
		WHEN 'Pass Only' THEN  'Pass Only'
		WHEN 'Ofqual Graded' THEN OfqualGradingScheme
		WHEN 'NoGrade' THEN 'NoGrade' 
		WHEN 'L3VA' THEN (SELECT QualificationLookup.QualificationDescription FROM QualificationLookup WHERE QualificationLookup.ID = QualificationID)
		ELSE NULL
	END as QualificationType,

	LEFT(Grouping1, 100) AS Grouping1,
	LEFT(Grouping2, 100) AS Grouping2,
	LEFT(Grouping3, 100) AS Grouping3,
	LEFT(Grouping4, 100) AS Grouping4,
	CountOfEnrol,
	GroupingQOEPoints_College,
	GroupingQOEPoints_College_Dividend,
	GroupingQOEPoints_College_Divisor,
	GroupingQOEPoints_GCSE_College,
	GroupingQOEPoints_GCSE_College_Dividend,
	GroupingQOEPoints_GCSE_College_Divisor,

	--GroupingQOEPoints_Final,
	--GroupingQOEPoints_Final_Dividend,
	--GroupingQOEPoints_Final_Divisor,

	--GroupingQOEPoints_GCSE_Final,
	--GroupingQOEPoints_GCSE_Final_Dividend,
	--GroupingQOEPoints_GCSE_Final_Divisor,

	--GroupingEstPoints_AcYrMin3,
	--GroupingEstPoints_AcYrMin3_Dividend,
	--GroupingEstPoints_AcYrMin3_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin3 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin3, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin3 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin3],

	--GroupingEstPoints_AcYrMin2,
	--GroupingEstPoints_AcYrMin2_Dividend,
	--GroupingEstPoints_AcYrMin2_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin2 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin2, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin2 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin2],
	
	--GroupingEstPoints_AcYrMin1,
	--GroupingEstPoints_AcYrMin1_Dividend,
	--GroupingEstPoints_AcYrMin1_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin1 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin1, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin1 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin1],

	--GroupingVAScore_vs_Orig,
	--GroupingVAScore_vs_Orig_Dividend,
	--GroupingVAScore_vs_Orig_Divisor,
	
	--GroupingVAScore_vs_Adj,
	--GroupingVAScore_vs_Adj_Dividend,
	--GroupingVAScore_vs_Adj_Divisor,
	
	--GroupingVAScore_L3VAStu,
	--GroupingVAScore_L3VAStu_Dividend,
	--GroupingVAScore_L3VAStu_Divisor,
	
	--GroupingEstPoints_L3VAStu,
	--GroupingEstPoints_L3VAStu_Dividend,
	--GroupingEstPoints_L3VAStu_Divisor,

	--CASE WHEN GroupingEstPoints_L3VAStu IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_L3VAStu, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_L3VAStu )
	--	END
	--END AS [GroupingEstGrade_L3VAStu],

	--GroupingActPoints_L3VAStu,
	--GroupingActPoints_L3VAStu_Dividend,
	--GroupingActPoints_L3VAStu_Divisor,

	--CASE WHEN GroupingActPoints_L3VAStu IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingActPoints_L3VAStu, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingActPoints_L3VAStu )
	--	END
	--END AS [GroupingActGrade_L3VAStu],
	
	--GroupingEnrolmentGradeVAScore_vs_Orig,
	--GroupingEnrolmentGradeVAScore_vs_Orig_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_Orig_Divisor,

	--GroupingEnrolmentGradeVAScore_vs_Adj,
	--GroupingEnrolmentGradeVAScore_vs_Adj_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_Adj_Divisor,

	GroupingIYMostRecentPoints,
	GroupingIYMostRecentPoints_Dividend,
	GroupingIYMostRecentPoints_Divisor,

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE
		CASE WHEN VA_Type  = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingIYMostRecentPoints, Cohort)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingIYMostRecentPoints)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingIYMostRecentPoints )
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingIYMostRecentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingIYMostRecentPoints)
		ELSE	
			NULL
		END 
	END AS [GroupingIYMostRecentGrade],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingIYMostRecentPoints, Cohort)
		WHEN VA_Type = 'Pass Only' THEN 
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingIYMostRecentPoints)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingIYMostRecentPoints )
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingIYMostRecentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingIYMostRecentPoints)
		ELSE
			NULL
		END  
	END AS [GroupingIYMostRecentGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4  
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END 
	END AS [GroupingIYMostRecentAboveEstGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE 
			NULL
		END 
	END AS [GroupingIYMostRecentBelowEstGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYMostRecentEqualEstGradeNo],

	GroupingIYMostRecentPoints_Divisor AS CountofIYEnrol, --the divisor is the same as the number of enrols.

	--GroupingIYMostRecent_vs_Orig,
	--GroupingIYMostRecent_vs_Orig_Dividend,
	--GroupingIYMostRecent_vs_Orig_Divisor,
	--GroupingIYMostRecent_vs_Adj,
	--GroupingIYMostRecent_vs_Adj_Dividend,
	--GroupingIYMostRecent_vs_Adj_Divisor,

	GroupingIYMostRecent_vs_RecentTarget,
	GroupingIYMostRecent_vs_RecentTarget_Dividend,
	GroupingIYMostRecent_vs_RecentTarget_Divisor,

	CASE WHEN VA_Type = 'L3VA' THEN
		CASE WHEN GroupingIYMostRecent_vs_RecentTarget = 0 THEN 'Avg' 
		ELSE
			(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE GroupingIYMostRecent_vs_RecentTarget >= NationalProgress.LowerLimit 
							AND GroupingIYMostRecent_vs_RecentTarget < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempFinal.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
			)
		END
	ELSE
		NULL
	END AS GroupingIYMostRecent_vs_RecentTarget_NationalBanding,
	
	GroupingPoint1Points,
	GroupingPoint1Points_Dividend,
	GroupingPoint1Points_Divisor,
	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint1Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint1Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint1Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint1Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint1Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint1Grade],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint1Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint1Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint1Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint1Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint1Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint1GradeNo],
	GroupingPoint1_vs_RecentTarget,
	GroupingPoint1_vs_RecentTarget_Dividend,
	GroupingPoint1_vs_RecentTarget_Divisor,
	GroupingPoint1Points_Divisor AS CountofIYEnrolPoint1, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1AboveEstGradeNo],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1BelowEstGradeNo],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1EqualEstGradeNo],


	GroupingPoint2Points,
	GroupingPoint2Points_Dividend,
	GroupingPoint2Points_Divisor,
	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint2Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint2Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint2Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint2Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint2Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint2Grade],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint2Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint2Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint2Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint2Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint2Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint2GradeNo],
	GroupingPoint2_vs_RecentTarget,
	GroupingPoint2_vs_RecentTarget_Dividend,
	GroupingPoint2_vs_RecentTarget_Divisor,
	GroupingPoint2Points_Divisor AS CountofIYEnrolPoint2, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2AboveEstGradeNo],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2BelowEstGradeNo],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2EqualEstGradeNo],


	GroupingPoint3Points,
	GroupingPoint3Points_Dividend,
	GroupingPoint3Points_Divisor,
	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint3Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint3Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint3Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint3Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint3Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint3Grade],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint3Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint3Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint3Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint3Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint3Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint3GradeNo],
	GroupingPoint3_vs_RecentTarget,
	GroupingPoint3_vs_RecentTarget_Dividend,
	GroupingPoint3_vs_RecentTarget_Divisor,
	GroupingPoint3Points_Divisor AS CountofIYEnrolPoint3, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3AboveEstGradeNo],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3BelowEstGradeNo],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3EqualEstGradeNo],


	GroupingPoint4Points,
	GroupingPoint4Points_Dividend,
	GroupingPoint4Points_Divisor,
	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint4Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint4Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint4Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint4Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint4Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint4Grade],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint4Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint4Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint4Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint4Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint4Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint4GradeNo],
	GroupingPoint4_vs_RecentTarget,
	GroupingPoint4_vs_RecentTarget_Dividend,
	GroupingPoint4_vs_RecentTarget_Divisor,
	GroupingPoint4Points_Divisor AS CountofIYEnrolPoint4, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4AboveEstGradeNo],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4BelowEstGradeNo],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4EqualEstGradeNo],


	GroupingPoint5Points,
	GroupingPoint5Points_Dividend,
	GroupingPoint5Points_Divisor,
	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint5Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint5Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint5Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint5Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint5Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint5Grade],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint5Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint5Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint5Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint5Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint5Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint5GradeNo],
	GroupingPoint5_vs_RecentTarget,
	GroupingPoint5_vs_RecentTarget_Dividend,
	GroupingPoint5_vs_RecentTarget_Divisor,
	GroupingPoint5Points_Divisor AS CountofIYEnrolPoint5, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5AboveEstGradeNo],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5BelowEstGradeNo],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5EqualEstGradeNo],

	GroupingPoint6Points,
	GroupingPoint6Points_Dividend,
	GroupingPoint6Points_Divisor,
	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint6Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint6Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint6Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint6Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint6Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint6Grade],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint6Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint6Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint6Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint6Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint6Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint6GradeNo],
	GroupingPoint6_vs_RecentTarget,
	GroupingPoint6_vs_RecentTarget_Dividend,
	GroupingPoint6_vs_RecentTarget_Divisor,
	GroupingPoint6Points_Divisor AS CountofIYEnrolPoint6, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6AboveEstGradeNo],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
		ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6BelowEstGradeNo],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6EqualEstGradeNo],

	GroupingPoint7Points,
	GroupingPoint7Points_Dividend,
	GroupingPoint7Points_Divisor,
	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint7Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint7Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint7Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint7Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint7Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint7Grade],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint7Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint7Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint7Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint7Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint7Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint7GradeNo],
	GroupingPoint7_vs_RecentTarget,
	GroupingPoint7_vs_RecentTarget_Dividend,
	GroupingPoint7_vs_RecentTarget_Divisor,
	GroupingPoint7Points_Divisor AS CountofIYEnrolPoint7, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7AboveEstGradeNo],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7BelowEstGradeNo],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7EqualEstGradeNo],

	GroupingPoint8Points,
	GroupingPoint8Points_Dividend,
	GroupingPoint8Points_Divisor,
	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint8Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint8Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint8Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint8Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint8Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint8Grade],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint8Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint8Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint8Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint8Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint8Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint8GradeNo],
	GroupingPoint8_vs_RecentTarget,
	GroupingPoint8_vs_RecentTarget_Dividend,
	GroupingPoint8_vs_RecentTarget_Divisor,
	GroupingPoint8Points_Divisor AS CountofIYEnrolPoint8, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8AboveEstGradeNo],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8BelowEstGradeNo],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8EqualEstGradeNo],


	-----------------------------------------------------------------------------------
	GroupingPoint9Points,
	GroupingPoint9Points_Dividend,
	GroupingPoint9Points_Divisor,
	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint9Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint9Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint9Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint9Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint9Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint9Grade],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint9Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint9Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint9Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint9Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint9Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint9GradeNo],
	GroupingPoint9_vs_RecentTarget,
	GroupingPoint9_vs_RecentTarget_Dividend,
	GroupingPoint9_vs_RecentTarget_Divisor,
	GroupingPoint9Points_Divisor AS CountofIYEnrolPoint9, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9AboveEstGradeNo],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9BelowEstGradeNo],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9EqualEstGradeNo],

	---------------------------------------------------------------------------------

	GroupingPoint10Points,
	GroupingPoint10Points_Dividend,
	GroupingPoint10Points_Divisor,
	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint10Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint10Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint10Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint10Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint10Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint10Grade],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint10Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint10Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint10Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint10Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint10Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint10GradeNo],
	GroupingPoint10_vs_RecentTarget,
	GroupingPoint10_vs_RecentTarget_Dividend,
	GroupingPoint10_vs_RecentTarget_Divisor,
	GroupingPoint10Points_Divisor AS CountofIYEnrolPoint10, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10AboveEstGradeNo],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10BelowEstGradeNo],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10EqualEstGradeNo],

	---------------------------------------------------------------------------------


	GroupingPoint11Points,
	GroupingPoint11Points_Dividend,
	GroupingPoint11Points_Divisor,
	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint11Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint11Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint11Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint11Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint11Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint11Grade],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint11Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint11Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint11Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint11Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint11Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint11GradeNo],
	GroupingPoint11_vs_RecentTarget,
	GroupingPoint11_vs_RecentTarget_Dividend,
	GroupingPoint11_vs_RecentTarget_Divisor,
	GroupingPoint11Points_Divisor AS CountofIYEnrolPoint11, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11AboveEstGradeNo],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11BelowEstGradeNo],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11EqualEstGradeNo],

	---------------------------------------------------------------------------------

	GroupingPoint12Points,
	GroupingPoint12Points_Dividend,
	GroupingPoint12Points_Divisor,
	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint12Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint12Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint12Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint12Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint12Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint12Grade],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint12Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint12Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint12Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint12Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint12Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint12GradeNo],
	GroupingPoint12_vs_RecentTarget,
	GroupingPoint12_vs_RecentTarget_Dividend,
	GroupingPoint12_vs_RecentTarget_Divisor,
	GroupingPoint12Points_Divisor AS CountofIYEnrolPoint12, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12AboveEstGradeNo],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12BelowEstGradeNo],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12EqualEstGradeNo],

	---------------------------------------------------------------------------------




	GroupingMostRecentCollegeEstPoints,
	GroupingMostRecentCollegeEstPoints_Dividend,
	GroupingMostRecentCollegeEstPoints_Divisor,

	CASE WHEN GroupingMostRecentCollegeEstPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingMostRecentCollegeEstPoints, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingMostRecentCollegeEstPoints)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingMostRecentCollegeEstPoints)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingMostRecentCollegeEstPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingMostRecentCollegeEstPoints)
		ELSE
			NULL
		END
	END AS [GroupingMostRecentCollegeEstGrade],

	GroupingVAScore_vs_MostRecent,
	GroupingVAScore_vs_MostRecent_Dividend,
	GroupingVAScore_vs_MostRecent_Divisor,

	--GroupingEnrolmentGradeVAScore_vs_AcYr,
	--GroupingEnrolmentGradeVAScore_vs_AcYr_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_AcYr_Divisor,

	GroupingEnrolmentGradeVAScore_vs_MostRecent,
	GroupingEnrolmentGradeVAScore_vs_MostRecent_Dividend,
	GroupingEnrolmentGradeVAScore_vs_MostRecent_Divisor,

	CASE WHEN VA_Type = 'L3VA' THEN
		CASE WHEN GroupingEnrolmentGradeVAScore_vs_MostRecent = 0 THEN 'Avg' 
		ELSE
			(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE GroupingEnrolmentGradeVAScore_vs_MostRecent >= NationalProgress.LowerLimit 
							AND GroupingEnrolmentGradeVAScore_vs_MostRecent < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempFinal.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
			)
		END
	ELSE
		NULL
	END AS GroupingEnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	GroupingEnrolmentPoints,
	GroupingEnrolmentPoints_Dividend,
	GroupingEnrolmentPoints_Divisor,
	CASE WHEN GroupingEnrolmentPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEnrolmentPoints, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingEnrolmentPoints)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingEnrolmentPoints)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingEnrolmentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingEnrolmentPoints)
		ELSE
			NULL
		END
	END AS [GroupingEnrolmentGrade],

	CountOfStudent,
	CA_QualTypeID,
	QualificationID,

	--GroupingEstPoints_AcYr,
	--GroupingEstPoints_AcYr_Dividend,
	--GroupingEstPoints_AcYr_Divisor,
	--CASE WHEN GroupingEstPoints_AcYr IS NULL THEN NULL
	--ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYr, Cohort)
	--		WHEN 'Pass Only' THEN
	--		[dbo].fn_CalculateGrade_PassOnly(GroupingEstPoints_AcYr)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYr )
	--	END
	--END AS [GroupingEstGrade_AcYr],

	--CAST (MostRecentCollegeEstPoints_STDEVP AS DECIMAL(19,2)) AS MostRecentPoints_STDEVP,
	--CASE ISNULL(GroupingMostRecentCollegeEstPoints,0) WHEN 0 THEN 0 ELSE
	--CAST( (MostRecentCollegeEstPoints_STDEVP/GroupingMostRecentCollegeEstPoints) * 100 AS DECIMAL(19,2)) 
	--END AS MostRecentPoints_STDEVP_AsPercentage,

	--CAST (EnrolmentGradeVAScore_vs_MostRecent_STDEVP AS DECIMAL(19,2)) AS EnrolmentGradeVA_MostRecent_STDEVP,

	--CAST (IYMostRecent_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IYMostRecentVA_STDEVP,
	--CAST (Point1_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY1VA_STDEVP,
	--CAST (Point2_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY2VA_STDEVP,
	--CAST (Point3_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY3VA_STDEVP,
	--CAST (Point4_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY4VA_STDEVP,
	--CAST (Point5_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY5VA_STDEVP,
	--CAST (Point6_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY6VA_STDEVP,
	--CAST (Point7_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY7VA_STDEVP,
	--CAST (Point8_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY8VA_STDEVP,

	CASE WHEN GroupingQOEPoints_College_Divisor = 0 THEN NULL ELSE GroupingQOEPoints_College_Divisor END AS CountofEnrolsWithQOE_All
	,CASE WHEN GroupingQOEPoints_GCSE_College_Divisor = 0 THEN NULL ELSE GroupingQOEPoints_GCSE_College_Divisor END AS CountofEnrolsWithQOE_GCSE
	,GroupingEnrolmentPoints_Divisor AS CountofEnrolsWithEnrolmentPoints,
--	,GroupingVAScore_L3VAStu_NumEnrols AS CountofEnrolsWithDfEVA

	CountofEnrolsWithIYPoints,
	CountOfEnrol - CountofEnrolsWithIYPoints AS CountofEnrolsWithMissingIYPoints,
	CountofEnrolsWithEnrolmentPoints,
	CountOfEnrol - CountofEnrolsWithEnrolmentPoints AS CountofEnrolsWithMissingEnrolPoints

	FROM #TempFinal


GO

/****** Object:  StoredProcedure [dbo].[sp_Student_Est_Act_VA]    Script Date: 02/05/2024 11:07:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_Student_Est_Act_VA]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_Student_Est_Act_VA] AS' 
END
GO




--drop table #TempQOEPointsAll
--drop table #TempQOEPointsGCSEOnly
--drop table #TempMain
ALTER Procedure [dbo].[sp_Student_Est_Act_VA]

 @AcademicYearID AS VARCHAR(5),
 @UseEnrolmentWebSave AS BIT = 0,
 @UserName AS VARCHAR(255) = NULL

AS 

-- =============================================
-- Author:		Andrew Genner
-- Create date: 07/03/2017
-- Description:	Present the Estimated Points and Grades 
-- alongside the Uplifted Grades and L3VA Scores with 
-- all Student and Enrolment Fields to Filter on.
------------------------------------------------
-- Modified:	AMG 11/07/2017 v1.1
-- Include the extra fields needed for populating the EstActVA to do the enhanced grouping analysis
-- Modified:	AMG 19/10/2017 v1.2.0.0
-- When setting HighlightPurple, the duration could be >2, so replace "WHEN 2" with ELSE.
-- =============================================
-- Modified:	AMG 13/12/2017 v1.3.0
-- Included the InYearGrade fields
-- =============================================
-- Modified 06/03/2018
-- Added new fields - EstPoints_AcYr2dp, EstGrade_AcYr, EstGradeInflated_AcYr, VAScore_vs_AcYr, EnrolmentGradeVAScore_vs_AcYr
-- =============================================
-- Modified:	AMG 28/04/2018 v1.4.0
-- Added the #TempMostRecentCollegeEstPoints temp table in - this is so we can show colunms of most recent VA
-- When 2pd fields are shown, these are in the columns.  The non-2dp fields are used for the Totals/Avgs.  The 2dp columns are NOT /10
-- The non-2dp fields are /10 (otherwise the totals don't work).
-- =============================================
-- Modified:	AMG 10/06/2018 v1.5.0
-- If the InYearGrade is Null and the enrolment is withdrawn, set grade to U and zero points
-- Take the VAScope from the Enrolment table
-- =============================================
-- Modified AMG 17/07/2018 v1.6.0
-- Added in QCG.AltGrade2
-- Modified AMG 04/09/2018 v1.6.0
-- InScope - Added APPG to CASE statement
-- =============================================
-- Modified AMG 01/10/2018 v1.7.0
-- Corrected some CASE Staements to CASE WHEN x IS NULL
-- Added New field MappingInfo - to indicate if record is mapped using the College Generic Headline figure
-- =============================================
-- Modified AMG 01/03/2018 v1.8.0
-- Added CA_TypeID so sp_EstAct_Grouping can use it
-- =============================================
-- Modified AMG 27/12/2018 v1.9.0
-- Added new Pointsfrom1718 the #TempQOE.. selects to cater for picking the QOE pointsfrom1718 >=2017
-- and modifed the calls to dbo.fn_calculatePoints - to pass the pointsfrom1718 though for national data from AcYr1718
-- Also, modified the QOE points shown to be the new Pointsfrom1718 from AcYr 18/19 onwards
-- =============================================
-- Modified AMG 04/06/2019 v1.13.0
-- Added New Student, Enrolment, Course UDFs and TeachingGroupCode
-- =============================================
-- Modified AMG 24/06/2019 v1.14.0
-- Added QOE precalculated points
-- EstPoints_AcYrMin3 - when we have more than 3 years national data, for AcYrMin3 we want to find the most recent available data - not just AcYr-3
-- =============================================
-- Modified AMG 01/07/2019 v1.14.0
-- Added InYear Points 5 - 8 and all the extra fields that entails.
-- =============================================
-- Modified AMG 30/09/2019 v1.15.0
-- Max and Min Grade problem - added a TOP(1) to prevent future problems - Base data has also been fixed to avoid multiple Min and Max grades being returned
-- =============================================
-- Modified AMG 19/01/2020 v1.18.0
-- Where Clause for CA_LearningAimRef - now tests for empty string and NULLs - more robust
-- =============================================
-- Modified AMG 30/01/2020 v1.19.0
-- HighlightPurpl, HighlightYellow - removed the 2dp from the fields as these are not used by the GUI
-- =============================================
-- Modified AMG 14/02/2020 v1.20.0
-- Added in fn_ConvertNewQOEPointstoOldQOEPoints - so we can convert new to old QOE points so we can use National Data for predictive grades in 16/17 and 15/16
-- =============================================
-- Modified AMG 03/04/2020 v1.21.0
-- Added in NVQLevel
-- =============================================
-- Modified AMG 24/04/2020 v1.22.0
-- Added in @UseEnrolmentWebSave and @UserName optional parameters.
-- Introduced the tabel #TempEnrolment.  This is populated with all enrolments, OR, if @EnrolmentWebSave is true, just the few we are saving via the web
-- Changed the way InYearGrade is joined.  We now have InYearGrade.LearningAimRef populated by the Web.  So we pull IYGrades into this SP by matching on LearningAimref + Course
-- If we can't match on LearningAimRef+Course, we just link on Course (as we used to).  Got rid of automatically setting IY points to 0 if enrol is Withdrawn.
-- Added InYearGrade Notes 1-8, PersonalTargetGrade
-- Added MostRecentNationalDataYear
-- Added OutcomeID, OutcomeDescription, TeachingGroupTitle
-- =============================================
-- Modified AMG 12/10/2020 v1.25.0
-- Simplified SQL to work out MostRecentNationalDataYear
-- =============================================
-- Modified AMG 23/11/2020 v1.26
-- Data now comes from vStudentEntryLearningAim rather than StudentEntryLearningAim
-- =============================================
-- Modified AMG 06/04/2021 v1.28
-- Added the IYMostRecentGradeNo, MostRecentCollegeEstGradeNo, MostRecentBelowTarget, MostRecentAboveTarget, MostRecentAtTarget fields for better reporting purposes
-- =============================================
-- Modified AMG 16/07/2021 v1.29
-- Added 8 new InYearGradeEffort Description fields varchar(100)
-- =============================================
-- Modified AMG 01/11/2021 v1.30
-- Added functionality for multi-year enrols on the same learning aim, so target grades in year 1 are used for frozen for subsequent years
-- Added TargetFrozenAcademicYearID
-- When calculating MostRecentNationalDataYear, added in AND AcademicYear.AcademicYearNo < @AcademicYearNo
-- =============================================
-- Modified AMG 13/06/2022 v1.32
-- Added InYear Points 9 - 12
-- Add in National Progress Banding
-- Added in IYMostRecent_vs_RecentTarget_NationalBanding and EnrolmentGradeVAScore_vs_MostRecent_NationalBanding
-- =============================================
-- Modified AMG 09/12/2022 v1.33
-- swapped the coalesce over to select grade first, then altgrade
-- =============================================
-- Modified AMG 24/01/2023 v1.34
-- Added EnrolmentGradeNo, EnrolmentGradeBelowTarget, EnrolmentGradeAboveTarget, EnrolmentGradeAtTarget
-- =============================================
-- Modified AMG 03/07/2023 v1.35
-- If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
-- Altered PersonalTargetGrade to VARCHAR(255)
-- =============================================
-- Modified AMG 31/10/2023 v1.36
-- Added CountOfMappedQOE
-- Added CollegeStructure
-- =============================================
-- Modified AMG 29/04/2024 v1.38
-- changed Stu and Enrol Num UDFs back to decimal(19,2) - not varchar(30)
-- =============================================

--DECLARE @AcademicYearID CHAR(5)
--SELECT @AcademicYearID = '17/18'

DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

--Calculate the AcademicYear from where we are going to pull the National Progress Data
DECLARE @AcademicYearID_NationalProgress VARCHAR(5)
SELECT @AcademicYearID_NationalProgress = (
											SELECT MAX(NationalProgress.AcademicYearID) 
											FROM NationalProgress 
											INNER JOIN AcademicYear 
												ON NationalProgress.AcademicYearID = AcademicYear.AcademicYearID
											WHERE AcademicYear.AcademicYearNo <= @AcademicYearNo
										)

	CREATE TABLE #TempEnrolment (ID INTEGER NOT NULL) --Used to populate #TempMain
	--Similarly, if we are only saving a few enrolments, populate #TempEnrolment with just a few, else, populate all of them...
	IF @UseEnrolmentWebSave = 1 
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		INNER JOIN EnrolmentWebSave 
		ON Enrolment.ID = EnrolmentWebSave.EnrolmentID
		WHERE Enrolment.QualificationID IS NOT NULL 
		AND EnrolmentWebSave.UserName = @UserName
		AND NOT EXISTS (SELECT ID FROM EstActVA WHERE EstActVA.ID = Enrolment.ID)
	END
	ELSE
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		WHERE Enrolment.QualificationID IS NOT NULL 
		AND Enrolment.AcademicYearID = @AcademicYearID
	END

	--Now get a list of all of the Students we need - used for QOE
	SELECT DISTINCT
		Enrolment.StudentID AS ID
	INTO
		#TempStudent
	FROM
		#TempEnrolment
	INNER JOIN Enrolment
	ON #TempEnrolment.ID = Enrolment.ID
	

--Get the QOE Points (GCSE Only) for Students in this AcYr
			SELECT 
				S.ID, 
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPointsGCSEOnly, --Avg(ELATG.Points/Volume) AS QOEPointsGCSEOnly
				CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsGCSEOnlyfrom1718 
			INTO
				#TempQOEPointsGCSEOnly
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			AND ELAT.GCSE = 1 --GCSE
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID
		
--Get the QOE Points (All) for Students in this AcYr
			SELECT 
				S.ID,  
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
				CASE SUM(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
			INTO
				#TempQOEPointsAll
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID

			--Newly added for v1.14 (AMG 24/06/2019)
			--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
			IF @AcademicYearNo < 2018 
			BEGIN
				INSERT #TempQOEPointsGCSEOnly (ID, QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsGCSEOnly, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsGCSEOnly WHERE #TempQOEPointsGCSEOnly.ID = SELAP.StudentID)

				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END
			ELSE
			BEGIN
				INSERT #TempQOEPointsGCSEOnly (ID, QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsGCSEOnly), SELAP.QOEPointsGCSEOnly --fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsGCSEOnly WHERE #TempQOEPointsGCSEOnly.ID = SELAP.StudentID)

				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll--fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END

			--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
			DECLARE @SystemSetting AS Bit
			SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

			--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
			IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsGCSEOnly SET QOEPointsGCSEOnly = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsGCSEOnly), QOEPointsGCSEOnlyfrom1718 = SELAP.QOEPointsGCSEOnly--fn replaces NULL
					FROM #TempQOEPointsGCSEOnly INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsGCSEOnly.ID = SELAP.StudentID

					UPDATE #TempQOEPointsAll SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END
			IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsGCSEOnly SET QOEPointsGCSEOnly = SELAP.QOEPointsGCSEOnly, QOEPointsGCSEOnlyfrom1718 = NULL
					FROM #TempQOEPointsGCSEOnly INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsGCSEOnly.ID = SELAP.StudentID

					UPDATE #TempQOEPointsAll SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END

--College Structure --New for v1.36 (05/12/2023)
DECLARE @FieldName AS VARCHAR(50)= ''
SELECT @FieldName = COALESCE(
					RIGHT(SystemSettingValue.SystemSettingValue,CHARINDEX('|',REVERSE(SystemSettingValue.SystemSettingValue))-1),
					RIGHT(SystemSettingValue.DefaultValue,CHARINDEX('|',REVERSE(SystemSettingValue.DefaultValue))-1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'
DECLARE @TableName AS VARCHAR(50) = ''
SELECT @TableName = COALESCE(
					LEFT(SystemSettingValue.SystemSettingValue, CHARINDEX('|', SystemSettingValue.SystemSettingValue + '|') - 1),
					LEFT(SystemSettingValue.DefaultValue, CHARINDEX('|', SystemSettingValue.DefaultValue + '|') - 1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'

CREATE TABLE #Temp_Enrol_CollegeStructure( [ID] [int] NOT NULL, CollegeStructure [varchar](255) NULL)

DECLARE @CollegeStructureSQL AS VARCHAR(MAX) = ''
IF @TableName = 'Enrolment' 
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Enrolment.' + @FieldName + ' AS CollegeStructure FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID'
END

IF @TableName = 'Course'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Course.' + @FieldName + ' AS CollegeStructure 
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Course ON Course.ID = Enrolment.CourseID'
END

IF @TableName = 'Student'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Student.' + @FieldName + ' AS CollegeStructure  
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Student ON Student.ID = Enrolment.StudentID'
END
EXEC(@CollegeStructureSQL)

--End of College Structure



--In Year Grades - firstly, pick all that match on Course and LAim
CREATE TABLE  #TempIYGradeEnrolment
(ID INT NOT NULL, Point1_Grade VARCHAR(20) NULL, Point2_Grade VARCHAR(20) NULL, Point3_Grade VARCHAR(20) NULL, Point4_Grade VARCHAR(20) NULL, 
		Point5_Grade VARCHAR(20) NULL, Point6_Grade VARCHAR(20) NULL, Point7_Grade VARCHAR(20) NULL, Point8_Grade VARCHAR(20) NULL,
		Point9_Grade VARCHAR(20) NULL, Point10_Grade VARCHAR(20) NULL, Point11_Grade VARCHAR(20) NULL, Point12_Grade VARCHAR(20) NULL,
		Point1_Points DECIMAL(19,2) NULL, Point2_Points DECIMAL(19,2) NULL, Point3_Points DECIMAL(19,2) NULL, Point4_Points DECIMAL(19,2) NULL, 
		Point5_Points DECIMAL(19,2) NULL, Point6_Points DECIMAL(19,2), Point7_Points DECIMAL(19,2), Point8_Points DECIMAL(19,2),
		Point9_Points DECIMAL(19,2) NULL, Point10_Points DECIMAL(19,2), Point11_Points DECIMAL(19,2), Point12_Points DECIMAL(19,2),
		Point1_Notes VARCHAR(1024) NULL, Point2_Notes VARCHAR(1024) NULL, Point3_Notes VARCHAR(1024) NULL, Point4_Notes VARCHAR(1024) NULL, 
		Point5_Notes VARCHAR(1024) NULL, Point6_Notes VARCHAR(1024) NULL, Point7_Notes VARCHAR(1024) NULL, Point8_Notes VARCHAR(1024) NULL, 
		Point9_Notes VARCHAR(1024) NULL, Point10_Notes VARCHAR(1024) NULL, Point11_Notes VARCHAR(1024) NULL, Point12_Notes VARCHAR(1024) NULL, PersonalTargetGrade VARCHAR(255) NULL,
		Point1_EffortDescription VARCHAR(100) NULL, Point2_EffortDescription VARCHAR(100) NULL, Point3_EffortDescription VARCHAR(100) NULL,
		Point4_EffortDescription VARCHAR(100) NULL, Point5_EffortDescription VARCHAR(100) NULL, Point6_EffortDescription VARCHAR(100) NULL,
		Point7_EffortDescription VARCHAR(100) NULL, Point8_EffortDescription VARCHAR(100) NULL, Point9_EffortDescription VARCHAR(100) NULL, 
		Point10_EffortDescription VARCHAR(100) NULL, Point11_EffortDescription VARCHAR(100) NULL, Point12_EffortDescription VARCHAR(100) NULL)

INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade, 
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points, 
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	END) AS Point5_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	END) AS Point8_Points,

	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point9_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point9_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point9_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade)
	END) AS Point9_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point10_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point10_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point10_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade)
	END) AS Point10_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point11_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point11_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point11_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade)
	END) AS Point11_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point12_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point12_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point12_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade)
	END) AS Point12_Points,
	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
			AND InYearGrade.LearningAimRef = Enrolment.LearningAimRef
			INNER JOIN QualificationLookup 
				ON QualificationLookup.ID = Enrolment.QualificationID
				INNER JOIN QualificationCodeLookup
					ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID

--Now, for any that don't match, just match on Course
INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points,
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	END) AS Point5_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	END) AS Point8_Points,

	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point9_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point9_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point9_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point9_Grade)
	END) AS Point9_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point10_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point10_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point10_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point10_Grade)
	END) AS Point10_Points,
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point11_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point11_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point11_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point11_Grade)
	END) AS Point11_Points,
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade) IS NULL
	THEN 
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point12_Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point12_Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point12_Grade)
		END)
	ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point12_Grade)
	END) AS Point12_Points,
	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN		(SELECT * FROM InYearGrade --We need to do this just in case we end up with records with unmatched LAims, so we could have "duplicate" IYG records
						INNER JOIN (SELECT Max(ID) AS MaxID FROM InYearGrade GROUP BY AcademicYearID, StudentID, CourseID) T
						ON InYearGrade.ID = T.MaxID) InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
		--INNER JOIN InYearGrade
		--	ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
		--	AND InYearGrade.StudentID = Enrolment.StudentID
		--	AND InYearGrade.CourseID = Enrolment.CourseID
			INNER JOIN QualificationLookup 
				ON QualificationLookup.ID = Enrolment.QualificationID
				INNER JOIN QualificationCodeLookup
					ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID
WHERE NOT EXISTS (SELECT #TempIYGradeEnrolment.ID FROM #TempIYGradeEnrolment WHERE #TempIYGradeEnrolment.ID = #TempEnrolment.ID)


	
--Get the core information for the procedure...		
SELECT 

	Enrolment.ID,
	Enrolment.AcademicYearID, 
	Student.StudentRef, Student.Surname, Student.Forenames, 
	Student.ID AS StudentID,
	Enrolment.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle,
	QualificationLookup.QualificationDescription, 
	QualificationLookup.WholeQualID,
	QualificationLookup.WholeQualID AS Qualification,
	QualificationCodeLookup.Size,
	QualificationLookup.ID AS QualificationID,

	CASE WHEN Enrolment.StartDate IS NULL THEN 1 --This is a bit belt and braces because the StartDate should NEVER be NULL, but so much relies on this!
	ELSE
	(CAST('20' + SUBSTRING(Enrolment.AcademicYearID,1,2) AS INT) - dbo.GetAcStartYearFromDate (Enrolment.StartDate) ) + 1
	END AS Duration, --should maybe rename to "Num AcYrs spanned" NumAcYrSpan - (or Num AcYrs appears in)
	Cohortlookup.CohortName AS Cohort, --**AMG 7/7/17

	CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN (CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) ELSE NULL END AS QOEPoints_College,--Vocational
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN (CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END) ELSE NULL END AS QOEPoints_GCSE_College,--Academic

	CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_Final, --Vocational
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_GCSE_Final, --Academic

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND QAY.QualificationID = QualificationLookup.ID
    AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the QAY record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN QualificationAcYr QAY1 ON QAY1.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND QAY1.QualificationID = QualificationLookup.ID
              )
	) AS EstPoints_AcYrMin3,

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYrMin2,

	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYrMin1,

	--NEW:
	(SELECT 
	CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsGCSEOnly.QOEPointsGCSEOnlyfrom1718 ELSE #TempQOEPointsGCSEOnly.QOEPointsGCSEOnly END)
	ELSE 
	dbo.fn_CalculatePoints(QAY.ID, CASE WHEN A.AcademicYearNo>=2017 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END) 
	END 
	FROM AcademicYear A 
	INNER JOIN QualificationAcYr QAY ON QAY.AcademicYearID = A.AcademicYearID
	AND A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID)
	AND QAY.QualificationID = QualificationLookup.ID
	) AS EstPoints_AcYr,

	(SELECT AcademicYear.AcademicYearID 
		FROM AcademicYear
		INNER JOIN (SELECT MAX(AcademicYearNo) AS MAXAcademicYearNo FROM QualificationAcYr QAY INNER JOIN AcademicYear ON QAY.AcademicYearID = AcademicYear.AcademicYearID WHERE QAY.QualificationID = QualificationLookup.ID AND AcademicYear.AcademicYearNo < @AcademicYearNo) T
		ON T.MAXAcademicYearNo = AcademicYear.AcademicYearNo) AS MostRecentNationalDataYear,

	L3VAStudent.EstimatedPoints AS EstPoints_L3VAStu,
	L3VAStudent.ActualPoints AS ActPoints_L3VAStu,
	L3VAStudent.ValueAddedScore AS VAScore_L3VAStu,

	--All the available Enrolment Fields:
	Enrolment.StartDate,
	Enrolment.PlannedEndDate,
	Enrolment.ActualEndDate,
	Enrolment.CompletionID,
	Enrolment.Grade AS EnrolmentGrade,
	--To calculate enrolment points, If we can't make a match with QCG.Grade, then try with QCG.AltGrade
	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = Enrolment.Grade) IS NULL
	THEN
		(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = Enrolment.Grade) IS NULL
		THEN
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = Enrolment.Grade)
		ELSE
		(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = Enrolment.Grade)
		END)
	ELSE
	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = Enrolment.Grade)
	END
	 ) AS EnrolmentPoints,
	Enrolment.UserDefinedString1 AS EnrolmentUserDefinedString1,
	Enrolment.UserDefinedString2 AS EnrolmentUserDefinedString2,
	Enrolment.UserDefinedString3 AS EnrolmentUserDefinedString3,
	Enrolment.UserDefinedString4 AS EnrolmentUserDefinedString4,
	Enrolment.UserDefinedNumber AS EnrolmentUserDefinedNumber,
	Enrolment.UserDefinedDate AS EnrolmentUserDefinedDate,
	Enrolment.UserDefinedString5 AS EnrolmentUserDefinedString5,
	Enrolment.UserDefinedString6 AS EnrolmentUserDefinedString6,
	Enrolment.UserDefinedString7 AS EnrolmentUserDefinedString7,
	Enrolment.UserDefinedString8 AS EnrolmentUserDefinedString8,
	Enrolment.UserDefinedNumber2 AS EnrolmentUserDefinedNumber2,
	Enrolment.TeachingGroupCode,
	Course.CourseCode, --**OK 7/7/17
	Course.Title AS CourseTitle, --**OK 7/7/17
	Course.UserDefinedString1 AS CourseUserDefinedString1, 
	Course.UserDefinedString2 AS CourseUserDefinedString2,
	Course.UserDefinedString3 AS CourseUserDefinedString3,
	Course.UserDefinedString4 AS CourseUserDefinedString4,
	--All the available Student Fields:
	Student.DOB,
	Ethnicity.Code As EthnicityCode,
	Ethnicity.[Definition] AS EthnicityDefinition,
	Student.Gender,
	Student.TutorGroupCode,
	Student.UserDefinedString1 AS StudentUserDefinedString1, 
	Student.UserDefinedString2 AS StudentUserDefinedString2,
	Student.UserDefinedString3 AS StudentUserDefinedString3,
	Student.UserDefinedString4 AS StudentUserDefinedString4,
	Student.UserDefinedNumber AS StudentUserDefinedNumber, 
	Student.UserDefinedString5 AS StudentUserDefinedString5, 
	Student.UserDefinedString6 AS StudentUserDefinedString6,
	Student.UserDefinedString7 AS StudentUserDefinedString7,
	Student.UserDefinedString8 AS StudentUserDefinedString8,
	Student.UserDefinedNumber2  AS StudentUserDefinedNumber2,
	Student.UserDefinedDate AS StudentUserDefinedDate,
	LLDDandHealthProblem.Code AS LLDDandHealthProblemCode,
	LLDDandHealthProblem.[Definition] AS LLDDandHealthProblemDefinition,
	Student.FreeSchoolMeal,
	QualificationCodeLookup.ID AS QualifcationCodeLookupID,
	QualificationCodeLookup.GradeBoundaryInflation,
	ISNULL(QualificationCodeLookup.QualificationCode,'') + ' - ' + ISNULL(QualificationCodeLookup.QualificationCodeDescription,'') AS QualificationCodeandName,
	(SELECT SL.SubjectCode FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectCode, --** 7/7/17 Added
	(SELECT SL.SubjectName FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectName, --** 7/7/17 Added

	#TempIYGradeEnrolment.Point1_Grade,
	#TempIYGradeEnrolment.Point2_Grade,
	#TempIYGradeEnrolment.Point3_Grade,
	#TempIYGradeEnrolment.Point4_Grade,
	#TempIYGradeEnrolment.Point5_Grade,
	#TempIYGradeEnrolment.Point6_Grade,
	#TempIYGradeEnrolment.Point7_Grade,
	#TempIYGradeEnrolment.Point8_Grade,
	#TempIYGradeEnrolment.Point9_Grade,
	#TempIYGradeEnrolment.Point10_Grade,
	#TempIYGradeEnrolment.Point11_Grade,
	#TempIYGradeEnrolment.Point12_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 'U' ELSE InYearGrade.Point1_Grade END) AS Point1_Grade, --If enrolment is withdrawn, it is a U automatically
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 'U' ELSE InYearGrade.Point2_Grade END) AS Point2_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 'U' ELSE InYearGrade.Point3_Grade END) AS Point3_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 'U' ELSE InYearGrade.Point4_Grade END) AS Point4_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 'U' ELSE InYearGrade.Point5_Grade END) AS Point5_Grade, --Added 01/07/2019
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 'U' ELSE InYearGrade.Point6_Grade END) AS Point6_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 'U' ELSE InYearGrade.Point7_Grade END) AS Point7_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 'U' ELSE InYearGrade.Point8_Grade END) AS Point8_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is a 0 points automatically
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point1_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point1_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point1_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point1_Grade)
	--END) 
	--END) AS Point1_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point2_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point2_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point2_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point2_Grade)
	--END)
	--END) AS Point2_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point3_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point3_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point3_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point3_Grade)
	--END)
	--END) AS Point3_Points,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point4_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point4_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point4_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point4_Grade)
	--END)
	--END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point5_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point5_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point5_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point5_Grade)
	--END)
	--END) AS Point5_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point6_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point6_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point6_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point6_Grade)
	--END)
	--END) AS Point6_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point7_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point7_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point7_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point7_Grade)
	--END)
	--END) AS Point7_Points,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 	
	--(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade) IS NULL
	--THEN 
	--	(CASE WHEN (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.ALtGrade = InYearGrade.Point8_Grade) IS NULL
	--	THEN
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade2 = InYearGrade.Point8_Grade)
	--	ELSE
	--	(SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.AltGrade = InYearGrade.Point8_Grade)
	--	END)
	--ELSE (SELECT QCG.Points FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID AND QCG.Grade = InYearGrade.Point8_Grade)
	--END)
	--END) AS Point8_Points,
	#TempIYGradeEnrolment.Point1_Points, 
	#TempIYGradeEnrolment.Point2_Points, 
	#TempIYGradeEnrolment.Point3_Points, 
	#TempIYGradeEnrolment.Point4_Points, 
	#TempIYGradeEnrolment.Point5_Points, 
	#TempIYGradeEnrolment.Point6_Points, 
	#TempIYGradeEnrolment.Point7_Points, 
	#TempIYGradeEnrolment.Point8_Points,
	#TempIYGradeEnrolment.Point9_Points, 
	#TempIYGradeEnrolment.Point10_Points, 
	#TempIYGradeEnrolment.Point11_Points, 
	#TempIYGradeEnrolment.Point12_Points,
	#TempIYGradeEnrolment.Point1_Notes, 
	#TempIYGradeEnrolment.Point2_Notes, 
	#TempIYGradeEnrolment.Point3_Notes, 
	#TempIYGradeEnrolment.Point4_Notes, 
	#TempIYGradeEnrolment.Point5_Notes, 
	#TempIYGradeEnrolment.Point6_Notes, 
	#TempIYGradeEnrolment.Point7_Notes, 
	#TempIYGradeEnrolment.Point8_Notes,
	#TempIYGradeEnrolment.Point9_Notes, 
	#TempIYGradeEnrolment.Point10_Notes, 
	#TempIYGradeEnrolment.Point11_Notes, 
	#TempIYGradeEnrolment.Point12_Notes,
	#TempIYGradeEnrolment.PersonalTargetGrade,

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = Student.AcademicYearID ) + '0831' AS DateTime),
	Student.DOB
	)) AS AgeOn31Aug,
	--Get the min and max grade so we can show the grade range...
	--v1.33 swapped the coalesce over to select grade first, then altgrade
	(SELECT TOP(1) COALESCE(QualificationCodeGradeLookup.Grade,QualificationCodeGradeLookup.AltGrade) AS Grade FROM QualificationCodeGradeLookup WHERE QualificationCodeGradeLookup.Points = 
		(SELECT Min(Points) AS MinPoints FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID)
	AND QualificationCodeGradeLookup.QualificationCodeID = QualificationCodeLookup.ID
	) AS MinGrade,
	--v1.33 swapped the coalesce over to select grade first, then altgrade
	(SELECT TOP(1) COALESCE(QualificationCodeGradeLookup.Grade,QualificationCodeGradeLookup.AltGrade) AS Grade FROM QualificationCodeGradeLookup WHERE QualificationCodeGradeLookup.Points = 
		(SELECT Max(Points) AS MaxPoints FROM QualificationCodeGradeLookup QCG WHERE QCG.QualificationCodeID = QualificationCodeLookup.ID)
	AND QualificationCodeGradeLookup.QualificationCodeID = QualificationCodeLookup.ID
	) AS MaxGrade,
	QAN.AB,
	QAN.DC,
	(SELECT ABAcronym FROM QAN_AB WHERE QAN_AB.AB = QAN.AB) AS ABAcronym,
	(SELECT DCName FROM QAN_DC WHERE QAN_DC.DC = QAN.DC) AS DCName,
	CAST((SELECT Map FROM QAN_DC WHERE QAN_DC.DC = QAN.DC) AS VARCHAR(4)) AS DCType,
	Enrolment.ID AS EnrolmentID,
	Enrolment.MappingInfo,
	Enrolment.OutcomeID,
	(CASE Enrolment.OutcomeID WHEN 1 THEN 'Achieved' WHEN 2 THEN 'Partial Ach.' WHEN 3 THEN 'Not Achieved' WHEN 8 THEN 'Not Known' ELSE NULL END) AS OutcomeDescription,
	Enrolment.TeachingGroupTitle,
	#TempIYGradeEnrolment.Point1_EffortDescription,
	#TempIYGradeEnrolment.Point2_EffortDescription,
	#TempIYGradeEnrolment.Point3_EffortDescription,
	#TempIYGradeEnrolment.Point4_EffortDescription,
	#TempIYGradeEnrolment.Point5_EffortDescription,
	#TempIYGradeEnrolment.Point6_EffortDescription,
	#TempIYGradeEnrolment.Point7_EffortDescription,
	#TempIYGradeEnrolment.Point8_EffortDescription,
	#TempIYGradeEnrolment.Point9_EffortDescription,
	#TempIYGradeEnrolment.Point10_EffortDescription,
	#TempIYGradeEnrolment.Point11_EffortDescription,
	#TempIYGradeEnrolment.Point12_EffortDescription

INTO #TempMain

FROM Student 
	LEFT JOIN  #TempQOEPointsGCSEOnly
	ON Student.ID = #TempQOEPointsGCSEOnly.ID
		LEFT JOIN #TempQOEPointsAll
		ON Student.ID = #TempQOEPointsAll.ID
			INNER JOIN Enrolment 
			ON Student.ID = Enrolment.StudentID
				INNER JOIN #TempEnrolment	
				ON Enrolment.ID = #TempEnrolment.ID
					LEFT JOIN LearningAim 
					ON LearningAim.LearningAimRef = Enrolment.LearningAimRef
					LEFT JOIN QAN
					ON QAN.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN QualificationLookup 
						ON QualificationLookup.ID = Enrolment.QualificationID
							INNER JOIN CohortLookup 
							ON QualificationLookup.CohortID = CohortLookup.ID
								INNER JOIN QualificationCodeLookup
								ON QualificationCodeLookup.ID = QualificationLookup.QualificationCodeID
								LEFT JOIN L3VAStudent 
								ON L3VAStudent.AcademicYearID = Enrolment.AcademicYearID
								AND L3VAStudent.Qualification = QualificationLookup.WholeQualID
								AND L3VAStudent.StudentID = Enrolment.StudentID
								LEFT JOIN Course
								ON Course.ID = Enrolment.CourseID
								LEFT JOIN Ethnicity
								ON Ethnicity.ID = Student.EthnicityID
								LEFT JOIN LLDDandHealthProblem
								ON LLDDandHealthProblem.ID = Student.LLDDandHealthProblemID
								LEFT JOIN #TempIYGradeEnrolment
								ON #TempEnrolment.ID = #TempIYGradeEnrolment.ID
								--LEFT JOIN InYearGrade
								--ON Enrolment.StudentID = InYearGrade.StudentID
								--AND Enrolment.AcademicYearID = InYearGrade.AcademicYearID
								--AND Enrolment.CourseID = InYearGrade.CourseID
WHERE 
	Enrolment.AcademicYearID = @AcademicYearID
	AND Enrolment.QualificationID IS NOT NULL --only pull those Enrolment records mapped to a CA Learning Aim
	AND LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) = 0 --if CA Learning Aim is mapped, do not include recs!


-----------------------------------------------------------------------------------------
--V1.30 - find any Targets set for a "frozen" year. If we find any, then use them here.--
-----------------------------------------------------------------------------------------
--SELECT * FROM #TempEnrolment WHERE ID IN (119147, 119150, 119159, 186304)
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @AcademicYearNo INTEGER
--SELECT @AcademicYearID = '18/19'
--SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID
CREATE TABLE #TempEnrolmentFrozenTargets (ID INTEGER NOT NULL, MostRecentCollegeEstGrade VARCHAR(10) NULL, MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL, AcademicYearID VARCHAR(5) NULL)

--A list of students and LearningAims who have a frozen Target grade in the year before this...
SELECT StudentRef, T2.AcademicYearID, T2.LearningAimRef
INTO #TempStudentsWithFrozenGrades_LA
FROM
(
		SELECT T.StudentRef, T.LearningAimRef, T.AcademicYearID
		, row_number() OVER(PARTITION BY T.StudentRef, T.LearningAimRef ORDER BY MIN(T.AcademicYearNo) ASC) AS rn
		FROM 
		(
			SELECT DISTINCT Enrolment.StudentRef, Enrolment.LearningAimRef, Enrolment.AcademicYearID, (SELECT AcademicYearNo FROM AcademicYear WHERE AcademicYearID = Enrolment.AcademicYearID) AS AcademicYearNo
			FROM
				(SELECT Enrolment.ID
				FROM Enrolment
					INNER JOIN FreezeTargetGradeForFutureYears
					ON FreezeTargetGradeForFutureYears.StudentRef = Enrolment.StudentRef
					AND FreezeTargetGradeForFutureYears.AcademicYearID = Enrolment.AcademicYearID
					AND FreezeTargetGradeForFutureYears.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN AcademicYear ON FreezeTargetGradeForFutureYears.AcademicYearID = AcademicYear.AcademicYearID
						AND AcademicYear.AcademicYearNo < @AcademicYearNo
						--AND Enrolment.StudentRef = '30134455'
						AND Enrolment.StudentRef IN (SELECT DISTINCT StudentRef FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID)
				) Frozen
			INNER JOIN Enrolment ON Frozen.ID = Enrolment.ID
		) T
		INNER JOIN Enrolment ON Enrolment.StudentRef = T.StudentRef
		
		GROUP BY T.StudentRef, T.AcademicYearID, T.LearningAimRef
) T2
WHERE T2.rn = 1

--Now we know the frozen records, we need the target grades from the EstActVA table
SELECT DISTINCT
	#TempStudentsWithFrozenGrades_LA.StudentRef, #TempStudentsWithFrozenGrades_LA.AcademicYearID, #TempStudentsWithFrozenGrades_LA.LearningAimRef,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstPoints, EstActVA.MostRecentCollegeEstGradeInflated
INTO
	#TempStudentsWithFrozenGrades_WithTargets_LA
FROM
	EstActVA
		INNER JOIN #TempStudentsWithFrozenGrades_LA
		ON EstActVA.StudentRef = #TempStudentsWithFrozenGrades_LA.StudentRef
		AND EstActVA.LearningAimRef = #TempStudentsWithFrozenGrades_LA.LearningAimRef
		AND EstActVA.AcademicYearID = #TempStudentsWithFrozenGrades_LA.AcademicYearID

--Now we know the target grades from the frozen records, pull these frozen target grades from the previous years in EstActVA and apply them to the current year
INSERT #TempEnrolmentFrozenTargets (ID, MostRecentCollegeEstGrade, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated, AcademicYearID)
SELECT 
	Enrolment.ID, #TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGrade,
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstPoints, 
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGradeInflated,
	#TempStudentsWithFrozenGrades_WithTargets_LA.AcademicYearID
FROM
	Enrolment
		INNER JOIN #TempStudentsWithFrozenGrades_WithTargets_LA
		ON Enrolment.StudentRef = #TempStudentsWithFrozenGrades_WithTargets_LA.StudentRef
			INNER JOIN Course
			ON Course.ID = Enrolment.CourseID
			AND #TempStudentsWithFrozenGrades_WithTargets_LA.LearningAimRef = Enrolment.LearningAimRef
			AND Enrolment.AcademicYearID = @AcademicYearID




----Get the MostRecentPoints into a Temp table 
--SELECT
--	#TempMain.ID,
--	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
--		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
--			#TempMain.EstPoints_AcYrMin3
--		ELSE  
--			#TempMain.EstPoints_AcYrMin2
--		END) 
--	ELSE  
--		EstPoints_AcYrMin1
--	END) AS MostRecentCollegeEstPoints
--INTO 
--	#TempMostRecentCollegeEstPoints
--FROM 
--	#TempMain


--Get the MostRecentPoints into a Temp table 
CREATE TABLE #TempMostRecentCollegeEstPoints (ID INTEGER NOT NULL,  MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL)

INSERT #TempMostRecentCollegeEstPoints (ID, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated)
SELECT
	#TempMain.ID,
	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3
		ELSE  
			#TempMain.EstPoints_AcYrMin2
		END) 
	ELSE  
		EstPoints_AcYrMin1
	END) AS MostRecentCollegeEstPoints,

	NULL AS MostRecentCollegeEstGradeInflated
FROM 
	#TempMain

--------------------------------------------------------------------------------------------------------------------------------
-- v1.30 Now we have the frozen target data in the #TempEnrolmentFrozenTargets table, populate #TempMostRecentCollegeEstPoints--
--------------------------------------------------------------------------------------------------------------------------------
--Substitute the MostRecentPoints with the Frozen MostRecentPoints held in #TempEnrolmentFrozenTargets
UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints = #TempEnrolmentFrozenTargets.MostRecentCollegeEstPoints
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID

UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated = ISNULL(#TempEnrolmentFrozenTargets.MostRecentCollegeEstGradeInflated,'')
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID


--This is the start of getting the Most Recent InYear Grade / Points in...
--v1.32.  A CASE statement can only be nested 10 levels deep, therefore here, we only go 10 levels deep.
--and place the values into #TempMostRecentInYearPointsGrades_1.  Then, in the next section, populate #TempMostRecentInYearPointsGrades
--by going 2 levels deeper again!
SELECT 
	#TempMain.ID,
	#TempMain.Point2_Grade,
	#TempMain.Point1_Grade,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Grade
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Grade 
										--	ELSE #TempMain.Point2_Grade END)
										--ELSE #TempMain.Point3_Grade END)
									ELSE #TempMain.Point4_Grade END)
								ELSE #TempMain.Point5_Grade END)
							ELSE #TempMain.Point6_Grade END)
						ELSE #TempMain.Point7_Grade END)
					ELSE #TempMain.Point8_Grade END) 
				ELSE #TempMain.Point9_Grade END)
			ELSE #TempMain.Point10_Grade END)
		ELSE #TempMain.Point11_Grade END)
	ELSE #TempMain.Point12_Grade END) 
	AS IYMostRecentGrade,

	#TempMain.Point2_Points,
	#TempMain.Point1_Points,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Points
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Points 
										--	ELSE #TempMain.Point2_Points END)
										--ELSE #TempMain.Point3_Points END)
									ELSE #TempMain.Point4_Points END) 
								ELSE #TempMain.Point5_Points END)
							ELSE #TempMain.Point6_Points END)
						ELSE #TempMain.Point7_Points END)
					ELSE #TempMain.Point8_Points END)
				ELSE #TempMain.Point9_Points END)
			ELSE #TempMain.Point10_Points END)
		ELSE #TempMain.Point11_Points END)
	ELSE #TempMain.Point12_Points END) 
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										'Pt.3'
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		(CASE WHEN ISNULL(#TempMain.Point1_Grade,'') = '' THEN
										--			'' 
										--		ELSE 'Pt.1' END)
										--	ELSE 'Pt.2' END)
										--ELSE 'Pt.3' END)
									ELSE 'Pt.4' END)
								ELSE 'Pt.5' END)
							ELSE 'Pt.6' END)
						ELSE 'Pt.7' END)
					ELSE 'Pt.8' END)
				ELSE 'Pt.9' END)
			ELSE 'Pt.10' END)
		ELSE 'Pt.11' END)
	ELSE 'Pt.12' END) 
	AS IYMostRecentPoint
INTO			
	#TempMostRecentInYearPointsGrades_1
FROM
	#TempMain
	

SELECT 
#TempMostRecentInYearPointsGrades_1.ID,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Grade 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Grade END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentGrade END)
	AS IYMostRecentGrade,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Points 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Points END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoints END)
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point1_Grade,'') = '' THEN
				'' 
			ELSE 'Pt.1' END)
		ELSE 'Pt.2' END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoint END)
	AS IYMostRecentPoint

INTO
#TempMostRecentInYearPointsGrades
FROM
#TempMostRecentInYearPointsGrades_1

--This last bit does a few calcs based upon the information pulled out from the Main part of the procedure.
--Doing it here at the end saves complication and duplication, so hopefully it is more efficient	

			--03/07/2023 AMG v1.35.0 This systemsetting decides if we use upper boundary to work out the Inflated grade.
			DECLARE @SystemSetting28 AS Bit
			SELECT @SystemSetting28 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 28)
			
SELECT
	#TempMain.ID,
	#TempMain.AcademicYearID,
	#TempMain.StudentRef,
	#TempMain.Surname,
	#TempMain.Forenames,
	#TempMain.LearningAimRef,
	#TempMain.LearningAimTitle,
	#TempMain.QualificationDescription,
	#TempMain.WholeQualID,
	#TempMain.size,
	#TempMain.QualificationID,
	#TempMain.Duration,
	#TempMain.Cohort,
	CAST(#TempMain.QOEPoints_College AS DECIMAL(19,2)) AS QOEPoints_College2dp,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,2)) AS QOEPoints_GCSE_College2dp,
	CAST(#TempMain.QOEPoints_Final AS DECIMAL(19,2)) AS QOEPoints_Final2dp,
	CAST(#TempMain.QOEPoints_GCSE_Final AS DECIMAL(19,2)) AS QOEPoints_GCSE_Final2dp,
	CAST(#TempMain.EstPoints_AcYrMin3 AS DECIMAL(19,2)) AS EstPoints_AcYrMin32dp,
	CAST(#TempMain.EstPoints_AcYrMin2 AS DECIMAL(19,2)) AS EstPoints_AcYrMin22dp,
	CAST(#TempMain.EstPoints_AcYrMin1 AS DECIMAL(19,2)) AS EstPoints_AcYrMin12dp,
	
	CAST(#TempMain.EstPoints_L3VAStu AS DECIMAL(19,2)) AS EstPoints_L3VAStu2dp,
	CAST(#TempMain.ActPoints_L3VAStu AS DECIMAL(19,2)) AS ActPoints_L3VAStu2dp,
	CAST(#TempMain.VAScore_L3VAStu AS DECIMAL(19,2)) AS VAScore_L3VAStu2dp,
	
	CASE #TempMain.AcademicYearID WHEN '17/18' THEN 'EstPoints_AcYrMin2'
	ELSE
		CASE Duration	WHEN 1 THEN 'EstPoints_AcYrMin2'
						ELSE 'EstPoints_AcYrMin3' --changed from 'WHEN 2 THEN' to ELSE
		END
	END AS HighlightPurple,
	
	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3)
	) AS EstGrade_AcYrMin3,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) 
	) AS EstGrade_AcYrMin2,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1)
	) AS EstGrade_AcYrMin1,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin3), GradeBoundaryInflation) 
		) 
	ELSE --normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin3,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin2), GradeBoundaryInflation) 
		) 
	ELSE--normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin2,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYrMin1), GradeBoundaryInflation) 
		) 
	ELSE--normal
		(SELECT 
		dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1), GradeBoundaryInflation) 
		) 
	END
	AS EstGradeInflated_AcYrMin1,

	--most recent estimated college grade - if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) IS NULL THEN 
	--	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3) 
	--	ELSE  
	--	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2)
	--	END) 
	--ELSE  
	--dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) 
	--END) AS MostRecentCollegeEstGrade,

	--simplified v1.30:
	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)
	) 	AS MostRecentCollegeEstGrade,

	----most recent estimated college grade (Inflated)- if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) IS NULL THEN 
	--	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin3) , GradeBoundaryInflation)
	--	ELSE  
	--	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin2) , GradeBoundaryInflation)
	--	END) 
	--ELSE  
	--dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYrMin1) , GradeBoundaryInflation) 
	--END) AS MostRecentCollegeEstGradeInflated,

	--simplified v1.30:  If the Inflated Grade is NULL, in #TempMostRecentCollegeEstPoints, then it is not to be overwritten by a frozen grade
	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
		(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
		THEN
			(SELECT 
			dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) , GradeBoundaryInflation) 
			) 
		ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) 
	ELSE
			(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
		THEN
			(SELECT 
			dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) , GradeBoundaryInflation) 
			) 
		ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) 
	END
	AS MostRecentCollegeEstGradeInflated,

	Null AS Blank, --This is intentional because it is used by the Target Export routine.

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_L3VAStu)
	) AS EstGrade_L3VAStu,

	(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, ActPoints_L3VAStu)
	) AS ActGrade_L3VAStu,

		CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS VAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS VAScore_vs_Adj2dp,
	
	CASE Duration	WHEN 1 THEN (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN 'EstPoints_AcYrMin2' ELSE 'EstPoints_AcYrMin1' END)
					ELSE (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN 'EstPoints_AcYrMin3' ELSE 'EstPoints_AcYrMin2' END) ELSE 'EstPoints_AcYrMin1' END) --It is 2 or more years
	END AS HighlightYellow,

	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / 10
						ELSE ((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / 10  --It is 2 or more years
	END AS VAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
						ELSE ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
		END
	AS VAScore_vs_Adj,

	CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / 10 AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj2dp,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / 10
						ELSE ((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / 10 --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
						ELSE ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj,


	((#TempMain.VAScore_L3VAStu) / Size)/ 10 AS VAScore_L3VAStu,
	#TempMain.QOEPoints_College,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,14)) AS QOEPoints_GCSE_College,
	--#TempMain.QOEPoints_GCSE_College,
	#TempMain.QOEPoints_Final,
	#TempMain.QOEPoints_GCSE_Final,

	#TempMain.EstPoints_AcYrMin3,
	#TempMain.EstPoints_AcYrMin2,
	#TempMain.EstPoints_AcYrMin1,
	#TempMain.EstPoints_L3VAStu,
	#TempMain.ActPoints_L3VAStu,

	--All the available Enrolment Fields:
	StartDate,
	PlannedEndDate,
	ActualEndDate,
	CompletionID,
	EnrolmentGrade,
	EnrolmentPoints,
	EnrolmentUserDefinedString1,
	EnrolmentUserDefinedString2,
	EnrolmentUserDefinedString3,
	EnrolmentUserDefinedString4,
	EnrolmentUserDefinedNumber,
	EnrolmentUserDefinedDate,
	CourseCode,
	CourseTitle,
	--All the available Student Fields:
	DOB,
	EthnicityCode,
	EthnicityDefinition,
	EthnicityCode + ' - ' + ISNULL(EthnicityDefinition,'') AS Ethnicity, --** 7/7/17 Added
	Gender,
	TutorGroupCode,
	StudentUserDefinedString1,
	StudentUserDefinedString2,
	StudentUserDefinedString3,
	StudentUserDefinedString4,
	StudentUserDefinedNumber,
	StudentUserDefinedDate,
	LLDDandHealthProblemCode,
	LLDDandHealthProblemDefinition,
	LLDDandHealthProblemCode + ' - ' + ISNULL(LLDDandHealthProblemDefinition,'') AS LLDDandHealthProblem, --** 7/7/17 Added
	FreeSchoolMeal,
	(SELECT Completion.[Description] FROM Completion WHERE CompletionID = Completion.ID) AS CompletionDescription,
	Qualification, --**7/7/17 Added
	QualificationCodeandName, --** 7/7/17 Added
	ISNULL(SubjectCode,'') + ' - ' + ISNULL(SubjectName,'') AS SubjectCodeandName, --** 7/7/17 Added
	Point1_Grade,
	Point2_Grade,
	Point3_Grade,
	Point4_Grade,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,

	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE  CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point1_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point2_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point3_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point4_Points - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((Point1_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point1_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point1_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point2_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN (((Point2_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point2_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point3_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point3_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point3_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST((((Point4_Points - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((Point4_Points - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((Point4_Points - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig,
	
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point1_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point2_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point3_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point4_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point1_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point2_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point3_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS Point4_vs_Adj,

	AgeOn31Aug,
	
	--The new fields needed now that CA is included:
	NULL AS CA_LearningAimTitle, --CA Equiv of Qualif Desc
	NULL AS CA_LearningAimRef, --CA Equiv of WholeQualID
	#TempMain.AB AS AB, 
	#TempMain.DC AS DC, 
	#TempMain.ABAcronym AS ABAcronym,
	#TempMain.DCName AS DCName,
	#TempMain.DCType AS DCType,
	'L3VA' AS VA_Type,
	ISNULL(MinGrade,'') + '-' + ISNULL(MaxGrade,'') AS GradeRange,
	--Added so we can work out the census point for w/d enrols
	CASE #TempMain.CompletionID WHEN '3' THEN DATEDIFF(dd, #TempMain.StartDate, #TempMain.ActualEndDate) ELSE NULL END AS WDNumDaysAfterStart, --Only show days for Withdrawn status
	--Added so we can show the current ac yr stats
	/*NEW*/	CAST(#TempMain.EstPoints_AcYr AS DECIMAL(19,2)) AS EstPoints_AcYr2dp,
	/*NEW*/	#TempMain.EstPoints_AcYr AS EstPoints_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYr)
	) AS EstGrade_AcYr,

	--If the syssetting 28 is true, use the upper boundary to calculate the inflated grade, else use the mid point (normal)
	CASE WHEN @SystemSetting28 = 1 THEN
	/*NEW*/(SELECT 	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade_UpperBoundary(#TempMain.QualificationID, EstPoints_AcYr), GradeBoundaryInflation))
	ELSE
	/*NEW*/(SELECT 	dbo.fn_CalculateGradeInflation(QualifcationCodeLookupID, dbo.fn_CalculateGrade(#TempMain.QualificationID, EstPoints_AcYr), GradeBoundaryInflation)) 
	END
	AS EstGradeInflated_AcYr,

	/*NEW*/CAST(((ActPoints_L3VAStu - EstPoints_AcYr) / Size) /10 AS DECIMAL(19,2)) AS VAScore_vs_AcYr2dp,
	/*NEW*/ ((ActPoints_L3VAStu - EstPoints_AcYr) / Size)/ 10 AS VAScore_vs_AcYr,
	/*NEW*/ CAST(((EnrolmentPoints - EstPoints_AcYr) / Size) /10  AS DECIMAL(19,2))	AS EnrolmentGradeVAScore_vs_AcYr2dp,
	/*NEW*/ ((EnrolmentPoints - EstPoints_AcYr) / Size) / 10 AS EnrolmentGradeVAScore_vs_AcYr,
	#TempMain.AcademicYearID AS StudentAcYrID,
	--CASE (SELECT ID FROM QualificationLearningAim QLA WHERE #TempMain.LearningAimRef = QLA.LearningAimRef AND #TempMain.AcademicYearID = QLA.AcademicYearID) 	WHEN NULL THEN 'No' ELSE 'Yes' END AS InScope,
	CASE WHEN #TempMain.Cohort = 'Applied general' THEN
		CASE WHEN ISNULL((SELECT ID FROM AppliedGeneral_Scope S WHERE #TempMain.LearningAimRef = S.LearningAimRef AND #TempMain.AcademicYearID = S.AcademicYearID),0) >0 THEN 'Yes' ELSE 'No'END
	ELSE 'Yes' END AS InScope,
	'Yes' AS IsGraded,
	#TempMain.EnrolmentID,
	CASE WHEN #TempMain.LearningAimRef IN (SELECT LearningAimRef FROM QualificationLearningAimCollege UNION SELECT LearningAimRef FROM QualificationLearningAimCourseCollege) THEN 'Yes' ELSE 'No' END AS CollegeMapped,
	
	CAST(#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints AS DECIMAL(19,2)) AS MostRecentCollegeEstPoints2dp,
	#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints,
	CAST(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS VAScore_vs_MostRecent2dp,
	(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS VAScore_vs_MostRecent,
	CAST(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS EnrolmentGradeVAScore_vs_MostRecent2dp,
	(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS EnrolmentGradeVAScore_vs_MostRecent,
	
	CAST(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point1_vs_MostRecent2dp,
	(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point1_vs_MostRecent,
	CAST(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point2_vs_MostRecent2dp,
	(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point2_vs_MostRecent,
	CAST(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS Point3_vs_MostRecent2dp,
	(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point3_vs_MostRecent,
	CAST(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) /10 AS DECIMAL(19,2)) AS Point4_vs_MostRecent2dp,
	(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point4_vs_MostRecent,

	--Most recent InYear Grade fields
	#TempMostRecentInYearPointsGrades.IYMostRecentGrade,
	#TempMostRecentInYearPointsGrades.IYMostRecentPoints,
	
	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2))
					ELSE  CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / Size) /10 AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) /10) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) /10) / Size)
						ELSE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) /10) / Size) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig,

	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2))
					ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10  AS DECIMAL(19,2)) --It is 2 or more years
	END AS IYMostRecent_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / 10
					ELSE ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) /10 --It is 2 or more years
	END AS IYMostRecent_vs_Adj,

	CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS IYMostRecent_vs_RecentTarget2dp,
	(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) AS IYMostRecent_vs_RecentTarget,
	IYMostRecentPoint, --the most recent IY Point (e.g. Pt.1, Pt.2)
	#TempMain.MappingInfo,
	NULL AS CA_QualTypeID,
	NULL AS CA_QualTypeDescription,
	#TempMain.TeachingGroupCode,
	StudentUserDefinedString5,
	StudentUserDefinedString6,
	StudentUserDefinedString7,
	StudentUserDefinedString8,
	StudentUserDefinedNumber2,
	EnrolmentUserDefinedString5,
	EnrolmentUserDefinedString6,
	EnrolmentUserDefinedString7,
	EnrolmentUserDefinedString8,
	EnrolmentUserDefinedNumber2,
	CourseUserDefinedString1,
	CourseUserDefinedString2,
	CourseUserDefinedString3,
	CourseUserDefinedString4,

	Point5_Grade,
	Point6_Grade,
	Point7_Grade,
	Point8_Grade,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	--Note AMG 01/07/2019 1.14.0 - Not going to include the Orig and Adj fields - it's overblown.
	--CASE Duration	WHEN 1 THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point5_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point5_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point5_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point6_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point6_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point6_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point7_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point7_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point7_vs_Orig2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point8_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					ELSE CAST(((Point8_Points - EstPoints_AcYrMin3) /*/ Size*/) AS DECIMAL(19,2)) --It is 2 or more years
	--					END --NEW
	--END AS Point8_vs_Orig2dp,
	--	CASE Duration	WHEN 1 THEN CAST(((Point5_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point5_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point5_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point5_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point5_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point6_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point6_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point6_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point6_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point7_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point7_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point7_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point7_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - EstPoints_AcYrMin2) /10 /*/ Size*/) AS DECIMAL(19,2))
	--				ELSE CASE WHEN (Point8_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
	--					THEN ((Point8_Points - EstPoints_AcYrMin2) /10 /*/ Size*/)
	--					ELSE ((Point8_Points - EstPoints_AcYrMin3) /10 /*/ Size*/) --It is 2 or more years
	--					END --NEW
	--END AS Point8_vs_Orig,
	--CASE Duration	WHEN 1 THEN CAST(((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point5_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point6_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point7_vs_Adj2dp,
	--CASE Duration	WHEN 1 THEN CAST(((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2))
	--				ELSE CAST(((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/)  AS DECIMAL(19,2)) --It is 2 or more years
	--END AS Point8_vs_Adj2dp,

	--CASE Duration	WHEN 1 THEN ((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point5_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point5_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point6_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point6_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point7_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point7_vs_Adj,
	--CASE Duration	WHEN 1 THEN ((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) /*/ Size*/) / 10
	--				ELSE ((Point8_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) /*/ Size*/) /10 --It is 2 or more years
	--END AS Point8_vs_Adj,

	CAST(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point5_vs_MostRecent2dp,
	(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point5_vs_MostRecent,
	CAST(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point6_vs_MostRecent2dp,
	(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point6_vs_MostRecent,
	CAST(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point7_vs_MostRecent2dp,
	(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point7_vs_MostRecent,
	CAST(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10 AS DECIMAL(19,2)) AS Point8_vs_MostRecent2dp,
	(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point8_vs_MostRecent,

	(SELECT LearningAim.NotionalNVQLevel FROM LearningAim WHERE LearningAim.LearningAimRef = #TempMain.LearningAimRef) AS NVQLevel,
	#TempMain.Point1_Notes, 
	#TempMain.Point2_Notes, 
	#TempMain.Point3_Notes, 
	#TempMain.Point4_Notes, 
	#TempMain.Point5_Notes, 
	#TempMain.Point6_Notes, 
	#TempMain.Point7_Notes, 
	#TempMain.Point8_Notes,
	NULL AS OfqualGradingScheme,
	#TempMain.MostRecentNationalDataYear,
	#TempMain.PersonalTargetGrade,
	#TempMain.OutcomeID,
	#TempMain.OutcomeDescription,
	#TempMain.TeachingGroupTitle,

	(SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) AS IYMostRecentGradeNo, --v1.28
	(SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) AS MostRecentCollegeEstGradeNo, --v1.28
	
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) > (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentBelowTarget, --v1.28
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) < (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentAboveTarget, --v1.28
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)) = (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) THEN 1 ELSE 0 END AS MostRecentAtTarget, --v1.28

	#TempMain.Point1_EffortDescription,
	#TempMain.Point2_EffortDescription,
	#TempMain.Point3_EffortDescription,
	#TempMain.Point4_EffortDescription,
	#TempMain.Point5_EffortDescription,
	#TempMain.Point6_EffortDescription,
	#TempMain.Point7_EffortDescription,
	#TempMain.Point8_EffortDescription,
	(SELECT AcademicYearID FROM #TempEnrolmentFrozenTargets WHERE #TempEnrolmentFrozenTargets.ID = #TempMain.ID) AS TargetFrozenAcademicYearID,
	Point9_Grade,
	Point10_Grade,
	Point11_Grade,
	Point12_Grade,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	CAST(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point9_vs_MostRecent2dp,
	(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point9_vs_MostRecent,
	CAST(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point10_vs_MostRecent2dp,
	(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point10_vs_MostRecent,
	CAST(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point11_vs_MostRecent2dp,
	(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point11_vs_MostRecent,
	CAST(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10 AS DECIMAL(19,2)) AS Point12_vs_MostRecent2dp,
	(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) AS Point12_vs_MostRecent,
	#TempMain.Point9_Notes, 
	#TempMain.Point10_Notes, 
	#TempMain.Point11_Notes, 
	#TempMain.Point12_Notes,
	#TempMain.Point9_EffortDescription,
	#TempMain.Point10_EffortDescription,
	#TempMain.Point11_EffortDescription,
	#TempMain.Point12_EffortDescription,

	--get the national data for the most recent academic year in the nationalprogress table (IY points against target grade)
	CASE WHEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) = 0 THEN 'Avg'
	ELSE
	(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) >= NationalProgress.LowerLimit 
							AND (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) /10) < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempMain.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
	)
	END AS IYMostRecent_vs_RecentTarget_NationalBanding,
	--get the national data for the most recent academic year in the nationalprogress table (Actual Grade against target grade)
	CASE WHEN (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) = 0 THEN 'Avg'
	ELSE
	(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) >= NationalProgress.LowerLimit 
							AND (((#TempMain.EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / 10) < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempMain.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
	)
	END AS EnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	(SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) AS EnrolmentGradeNo, --v1.34
	
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) < (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeBelowTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) > (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeAboveTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)) = (SELECT dbo.fn_CalculateGradeNo(QualificationID, EnrolmentPoints)) THEN 1 ELSE 0 END AS EnrolmentGradeAtTarget, --v1.34

	(SELECT Count(vStudentEntryLearningAim.EntryLearningAimRef) 
	FROM vStudentEntryLearningAim 
	INNER JOIN EntryLearningAim ON vStudentEntryLearningAim.EntryLearningAimRef = EntryLearningAim.EntryLearningAimRef
	INNER JOIN EntryLearningAimType ON EntryLearningAim.EntryLearningAimTypeID = EntryLearningAimType.ID
	INNER JOIN EntryLearningAimTypeGrade ON EntryLearningAimType.ID = EntryLearningAimTypeGrade.EntryLearningAimTypeID
	WHERE vStudentEntryLearningAim.Grade = LTRIM(RTRIM(EntryLearningAimTypeGrade.Grade))
	AND EntryLearningAimType.IsObsolete = 0
	AND vStudentEntryLearningAim.StudentID = #TempMain.StudentID
	) AS CountOfMappedQOE--v1.36

	, (SELECT #Temp_Enrol_CollegeStructure.CollegeStructure FROM #Temp_Enrol_CollegeStructure WHERE #Temp_Enrol_CollegeStructure.ID = #TempMain.ID) AS CollegeStructure --v1.36

FROM
	#TempMain
	LEFT JOIN #TempMostRecentCollegeEstPoints
	ON #TempMain.ID = #TempMostRecentCollegeEstPoints.ID
	LEFT JOIN #TempMostRecentInYearPointsGrades
	ON #TempMain.ID = #TempMostRecentInYearPointsGrades.ID




GO

/****** Object:  StoredProcedure [dbo].[sp_Student_Est_Act_VA_CA]    Script Date: 02/05/2024 11:07:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_Student_Est_Act_VA_CA]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_Student_Est_Act_VA_CA] AS' 
END
GO





--exec [sp_Student_Est_Act_VA_CA] '19/20'

ALTER Procedure [dbo].[sp_Student_Est_Act_VA_CA]

 @AcademicYearID AS VARCHAR(5),
 @UseEnrolmentWebSave AS BIT = 0,
 @UserName AS VARCHAR(255) = NULL

AS 

-- =============================================
-- Author:		Andrew Genner
-- Create date: 01/02/2018
-- Adapted from sp_Student_Est_Act_VA
-- =============================================
-- Modified 06/03/2018
-- Added new fields - EstPoints_AcYr2dp, EstGrade_AcYr, EstGradeInflated_AcYr, VAScore_vs_AcYr, EnrolmentGradeVAScore_vs_AcYr
-- Modified 23/04/18 AMG
-- Added in the Left Join to vKS5Aim_L2L3CAStudent to get actual CA VA.  Added in VAScore_vs_Orig2dp calcs etc.
-- =============================================
-- Modified:	AMG 28/04/2018 v1.4.0
-- Added the #TempMostRecentCollegeEstPoints temp table in - this is so we can show colunms of most recent VA
-- When 2pd fields are shown, these are in the columns.  The non-2dp fields are used for the Totals/Avgs.  The 2dp columns are NOT /10
-- The non-2dp fields are /10 (otherwise the totals don't work).
-- =============================================
-- Modified:	AMG 28/04/2018 v1.5.0
-- Made the InScope nore robust and made sure it doesn't /10 when it is a tech cert
-- If the InYearGrade is Null and the enrolment is withdrawn, set grade to U and zero points
-- =============================================
-- Modified AMG 01/10/2018 v1.7.0
-- Corrected some CASE Staements to CASE WHEN x IS NULL
-- Added New field MappingInfo - to indicate if record is mapped using the College Generic Headline figure
-- =============================================
-- Modified AMG 01/03/2018 v1.8.0
-- Added CA_TypeID so sp_EstAct_Grouping can use it
-- =============================================
-- Modified AMG 10/12/2018 v1.9.0
-- replaced WHEN 'Tech Level' with IN('Tech Level','L3 CA')
-- replaced WHEN 'Tech Cert' with IN('Tech Cert','L2 CA') 
-- =============================================
-- Modified AMG 27/12/2018 v1.9.0
-- Added new Pointsfrom1718 the #TempQOE
-- Modified AMG 11/02/2019 v1.10.0
-- Added  'L2 Other' to the IN('Tech Cert', 'L2 CA') list
-- =============================================
-- Modified AMG 27/05/2019 v1.13.0
-- Added CA_QualTypeDescription
-- =============================================
-- Modified AMG 04/06/2019 v1.13.0
-- Added New Student, Enrolment, Course UDFs and TeachingGroupCode
-- =============================================
-- Modified AMG 24/06/2019 v1.14.0
-- Added QOE precalculated points
-- EstPoints_AcYrMin3 - when we have more than 3 years national data, for AcYrMin3 we want to find the most recent available data - not just AcYr-3
-- =============================================
-- Modified AMG 01/07/2019 v1.14.0
-- Added InYear Points 5 - 8 and all the extra fields that entails.
-- =============================================
-- Modified AMG 01/07/2019 v1.16.0
-- IY Most Recent and Points 5 - 8 were always /10 - now changed to /1 if techcert, L2CA, L2Oth 
-- =============================================
-- Modified AMG 19/01/2020 v1.18.0
-- Where Clause for CA_LearningAimRef - now tests for empty string and NULLs - more robust
-- =============================================
-- Modified AMG 30/01/2020 v1.19.0
-- HighlightPurpl, HighlightYellow - removed the 2dp from the fields as these are not used by the GUI
-- =============================================
-- Modified AMG 14/02/2020 v1.20.0
-- Added in fn_ConvertNewQOEPointstoOldQOEPoints - so we can convert new to old QOE points so we can use National Data for predictive grades in 16/17 and 15/16
-- =============================================
-- Modified AMG 03/04/2020 v1.21.0
-- Added in NVQLevel
-- =============================================
-- Modified AMG 24/04/2020 v1.22.0
-- Added in @UseEnrolmentWebSave and @UserName optional parameters.
-- Introduced the tabel #TempEnrolment.  This is populated with all enrolments, OR, if @EnrolmentWebSave is true, just the few we are saving via the web
-- Changed the way InYearGrade is joined.  We now have InYearGrade.LearningAimRef populated by the Web.  So we pull IYGrades into this SP by matching on LearningAimref + Course
-- If we can't match on LearningAimRef+Course, we just link on Course (as we used to).  Got rid of automatically setting IY points to 0 if enrol is Withdrawn.
-- Added InYearGrade Notes 1-8, PersonalTargetGrade
-- Added MostRecentNationalDataYear
-- Added OutcomeID, OutcomeDescription, TeachingGroupTitle
-- =============================================
-- Modified AMG 23/11/2020 v1.26
-- Data now comes from vStudentEntryLearningAim rather than StudentEntryLearningAim
-- =============================================
-- Modified AMG 26/04/2021 v1.28
-- We have introduced some system settings to distribute the Target Grades based on the Quals on Entry for CA type qualifications
-- 1. A System Setting that allows grades to be distributed above and below the CA Attainment Grade based on the Avg QOE score for the LAim
-- 2. A System Setting that allows grades to be distributed above the CA Attainment Grade based on the Avg QOE score for the LAim.  The minimum Target Grade will be the CA Attainment Grade.
-- If both are TRUE, then (2) over-rides (1)
-- Depending on which of these settings are True, a new section has been added to this SP that calcluates a multiplication factor used to adjust the Target Grade Points.
-- =============================================
-- Modified AMG 06/04/2021 v1.28
-- Added the IYMostRecentGradeNo, MostRecentCollegeEstGradeNo, MostRecentBelowTarget, MostRecentAboveTarget, MostRecentAtTarget fields for better reporting purposes
-- =============================================
-- Modified AMG 16/07/2021 v1.29
-- Added 8 new InYearGradeEffort Description fields varchar(100)
-- =============================================
-- Modified AMG 22/00/2021 v1.30
-- Missing a Group By, which was causing an error.  Now fixed.
-- Added functionality for multi-year enrols on the same learning aim, so target grades in year 1 are used for frozen for subsequent years
-- Added TargetFrozenAcademicYearID
-- =============================================
-- Modified AMG 13/06/2022 v1.32
-- Added InYear Points 9 - 12
-- =============================================
-- Modified AMG 24/01/2023 v1.34
-- Added EnrolmentGradeNo, EnrolmentGradeBelowTarget, EnrolmentGradeAboveTarget, EnrolmentGradeAtTarget
-- =============================================
-- Modified AMG 23/03/2023 v1.35
-- Added some protection to potential / 0 problems (line 334, 994)
-- Altered PersonalTargetGrade to VARCHAR(255)
-- =============================================
-- Modified AMG 31/10/2023 v1.36
-- Added CountOfMappedQOE
-- Added CollegeStructure
-- =============================================
-- Modified AMG 29/04/2024 v1.38
-- changed Stu and Enrol Num UDFs back to decimal(19,2) - not varchar(30)
-- =============================================

--DROP TABLE #TempQOEPointsAll

--DROP TABLE #TempStudent
--DECLARE @AcademicYearID CHAR(5)
--SELECT @AcademicYearID = '18/19'

DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

	CREATE TABLE #TempEnrolment (ID INTEGER NOT NULL) --Used to populate #TempMain
	--Similarly, if we are only saving a few enrolments, populate #TempEnrolment with just a few, else, populate all of them...
	IF @UseEnrolmentWebSave = 1 
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		INNER JOIN EnrolmentWebSave 
		ON Enrolment.ID = EnrolmentWebSave.EnrolmentID
		WHERE LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0
		AND EnrolmentWebSave.UserName = @UserName
		AND NOT EXISTS (SELECT ID FROM EstActVA WHERE EstActVA.ID = Enrolment.ID)
	END
	ELSE
	BEGIN
		INSERT #TempEnrolment(ID)
		SELECT DISTINCT Enrolment.ID 
		FROM Enrolment 
		WHERE LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0
		AND Enrolment.AcademicYearID = @AcademicYearID --AND LearningAimRef = '50081652'
	END

	--Now get a list of all of the Students we need - used for QOE
	SELECT DISTINCT
		Enrolment.StudentID AS ID
	INTO
		#TempStudent
	FROM
		#TempEnrolment
	INNER JOIN Enrolment
	ON #TempEnrolment.ID = Enrolment.ID


--Get the QOE Points (All) for Students in this AcYr
			SELECT 
				S.ID,  
				CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
				CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
			INTO
				#TempQOEPointsAll
			FROM 
				EntryLearningAimTypeGrade ELATG
				INNER JOIN EntryLearningAimType ELAT
				ON ELATG.EntryLearningAimTypeID = ELAT.ID
					INNER JOIN EntryLearningAim ELA
					ON ELAT.ID = ELA.EntryLearningAimTypeID
						INNER JOIN vStudentEntryLearningAim SELA
						ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
							INNER JOIN #TempStudent S
							ON S.ID = SELA.StudentID
			AND ELATG.Grade = SELA.Grade
			--AND S.AcademicYearID = @AcademicYearID
			GROUP BY S.ID

			--Newly added for v1.14 (AMG 24/06/2019)
			--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
			IF @AcademicYearNo < 2018 
			BEGIN
				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END
			ELSE
			BEGIN
				INSERT #TempQOEPointsAll (ID, QOEPoints, QOEPointsfrom1718)
				SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll --fn replaces NULL
				FROM StudentEntryLearningAimPoints SELAP
				WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll WHERE #TempQOEPointsAll.ID = SELAP.StudentID)
			END


			--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
			DECLARE @SystemSetting AS Bit
			SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

			--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
			IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsAll SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END
			IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
			BEGIN
					UPDATE #TempQOEPointsAll SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
					FROM #TempQOEPointsAll INNER JOIN StudentEntryLearningAimPoints SELAP
					ON #TempQOEPointsAll.ID = SELAP.StudentID
			END

	--=============
	--NEW FOR v1.28
	--=============
	DECLARE @SystemSetting20 AS Bit
	SELECT @SystemSetting20 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 20) --Distribute All CA Target Grades based on Student QOE
	DECLARE @SystemSetting21 AS Bit
	SELECT @SystemSetting21 = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 21)--Distribute CA Target Grades based on Student QOE (Minimum Target Grade = CA Grade)

	CREATE TABLE #TempEnrolmentAdustedQOEFactor (EnrolmentID INT NOT NULL, QOEMultiplicationFactor DECIMAL(19,2) NULL) --Used to populate #TempMain

	IF @SystemSetting20 = 1 OR @SystemSetting21 = 1
	BEGIN
			--Now we have QOE for each student, we can work out the average QOE for each learning aim 
			--Get a distinct list of students on each learning aim
			SELECT DISTINCT LearningAimRef, StudentID INTO #TempLAimStudent FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID
			--Get an average QOE score for each Learning Aim 
			--we only need the from 1718Points because we are going to work out the multiplication factor and the factors will be the same for QOEPoints and QOEPointsfrom 1718
	
			CREATE TABLE #TempAvgQOEPerLAim (LearningAimRef VARCHAR(8) NOT NULL, AvgQOEPointsfrom1718_LAim DECIMAL(19,2) NULL) --Used to populate #TempMain

			--If we are saving from the Web, we need to work out the QOE Average for ALL students on the Learning Aims being saved - not simply the students we are saving.
	
			IF @UseEnrolmentWebSave = 1 
			BEGIN
						--Get a distinct list of the LearningAims we are interested in:
						SELECT DISTINCT LearningAimRef INTO #TempDISTINCTLAim FROM #TempLAimStudent
						--We need to get the QOE score of all students on the Learning Aims we are interested in:
						SELECT 
							S.ID,  
							CASE Sum(ELATG.Volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Points)/SUM(ELATG.Volume) END AS QOEPoints,--Avg(ELATG.Points/Volume) AS QOEPoints
							CASE SUM(ELATG.volume) WHEN 0 THEN 0 ELSE SUM(ELATG.Pointsfrom1718)/SUM(ELATG.Volume) END AS QOEPointsfrom1718
						INTO
							#TempQOEPointsAll_ForLAim
						FROM 
							EntryLearningAimTypeGrade ELATG
							INNER JOIN EntryLearningAimType ELAT
							ON ELATG.EntryLearningAimTypeID = ELAT.ID
								INNER JOIN EntryLearningAim ELA
								ON ELAT.ID = ELA.EntryLearningAimTypeID
									INNER JOIN vStudentEntryLearningAim SELA
									ON SELA.EntryLearningAimRef = ELA.EntryLearningAimRef
										INNER JOIN Student S
										ON S.ID = SELA.StudentID
											INNER JOIN Enrolment E
											ON S.ID = E.StudentID
												INNER JOIN #TempDISTINCTLAim
												ON E.LearningAimRef = #TempDISTINCTLAim.LearningAimRef
						AND ELATG.Grade = SELA.Grade
						GROUP BY S.ID

						--Newly added for v1.14 (AMG 24/06/2019)
						--If the pre-calculated Points have been imported, this is where we add them in (where there are no imported QOEs)...
						IF @AcademicYearNo < 2018 
						BEGIN
							INSERT #TempQOEPointsAll_ForLAim (ID, QOEPoints, QOEPointsfrom1718)
							SELECT SELAP.StudentID, SELAP.QOEPointsAll, NULL
							FROM StudentEntryLearningAimPoints SELAP
							WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll_ForLAim WHERE #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID)
						END
						ELSE
						BEGIN
							INSERT #TempQOEPointsAll_ForLAim (ID, QOEPoints, QOEPointsfrom1718)
							SELECT SELAP.StudentID, dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), SELAP.QOEPointsAll --fn replaces NULL
							FROM StudentEntryLearningAimPoints SELAP
							WHERE NOT EXISTS (SELECT ID FROM #TempQOEPointsAll_ForLAim WHERE #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID)
						END


						--get the system setting to decide if we are over-riding the Student QOEs with precalculated points
						--DECLARE @SystemSetting AS Bit
						SELECT @SystemSetting = (SELECT [Value] FROM SystemSettingFlag WHERE ID = 5)

						--If the setting is true, we want to over-write imported QOEs with precalculated QOE points where they exist.
						IF @SystemSetting = 1 AND @AcademicYearNo >= 2018--overwrite Student QOE points with precalculated points
						BEGIN
								UPDATE #TempQOEPointsAll_ForLAim SET QOEPoints = dbo.fn_ConvertNewQOEPointstoOldQOEPoints(SELAP.QOEPointsAll), QOEPointsfrom1718 = SELAP.QOEPointsAll--fn replaces NULL
								FROM #TempQOEPointsAll_ForLAim INNER JOIN StudentEntryLearningAimPoints SELAP
								ON #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID
						END
						IF @SystemSetting = 1 AND @AcademicYearNo < 2018--overwrite Student QOE points with precalculated points
						BEGIN
								UPDATE #TempQOEPointsAll_ForLAim SET QOEPoints = SELAP.QOEPointsAll, QOEPointsfrom1718 = NULL
								FROM #TempQOEPointsAll_ForLAim INNER JOIN StudentEntryLearningAimPoints SELAP
								ON #TempQOEPointsAll_ForLAim.ID = SELAP.StudentID
						END

						--Now work out the average QOE Points for each learning aim
						INSERT #TempAvgQOEPerLAim (LearningAimRef, AvgQOEPointsfrom1718_LAim)
						SELECT 
							#TempLAimStudent.LearningAimRef,
							CASE COUNT(#TempQOEPointsAll_ForLAim.ID) WHEN 0 THEN 0 ELSE SUM(#TempQOEPointsAll_ForLAim.QOEPointsfrom1718) / COUNT(#TempQOEPointsAll_ForLAim.ID) END AS AvgQOEPointsfrom1718_LAim	
						FROM #TempQOEPointsAll_ForLAim 
							INNER JOIN #TempLAimStudent 
							ON #TempQOEPointsAll_ForLAim.ID = #TempLAimStudent.StudentID
						GROUP BY 
							#TempLAimStudent.LearningAimRef --Added v1.30 22/09/22  This was missing and causing an error.
			END 
			ELSE
			BEGIN
						INSERT #TempAvgQOEPerLAim (LearningAimRef, AvgQOEPointsfrom1718_LAim)
						SELECT 
							#TempLAimStudent.LearningAimRef,
							CASE COUNT(#TempQOEPointsAll.ID) WHEN 0 THEN 0 ELSE SUM(#TempQOEPointsAll.QOEPointsfrom1718) / COUNT(#TempQOEPointsAll.ID) END AS AvgQOEPointsfrom1718_LAim
						FROM 
							#TempLAimStudent INNER JOIN #TempQOEPointsAll ON #TempLAimStudent.StudentID = #TempQOEPointsAll.ID
						GROUP BY 
							#TempLAimStudent.LearningAimRef
			END
	


			--This works out the multiplication factor for those QOE we know about
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT 
				#TempEnrolment.ID, 
				CASE #TempAvgQOEPerLAim.AvgQOEPointsfrom1718_LAim WHEN 0 THEN 0 ELSE (#TempQOEPointsAll.QOEPointsfrom1718 / #TempAvgQOEPerLAim.AvgQOEPointsfrom1718_LAim) END AS QOEMultiplicationFactor --Added CASE 0 AMG 21/03/2023
			FROM 
				#TempEnrolment
					INNER JOIN Enrolment
					ON #TempEnrolment.ID = Enrolment.ID
						INNER JOIN #TempAvgQOEPerLAim
						ON #TempAvgQOEPerLAim.LearningAimRef = Enrolment.LearningAimRef
							INNER JOIN #TempQOEPointsAll
							ON Enrolment.StudentID = #TempQOEPointsAll.ID
		
			--For Enrolments that don't have a multiplication factor, we need it to be 1.
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT ID, 1 AS QOEMultiplicationFactor
			FROM #TempEnrolment
			WHERE NOT EXISTS (SELECT ID FROM #TempEnrolmentAdustedQOEFactor WHERE #TempEnrolmentAdustedQOEFactor.EnrolmentID = #TempEnrolment.ID)


			--Where SystemSetting21 is TRUE, if the Multiplication factor is < 1 then set it to 1: This allows the CA Target Grade to be used as the minimum Target whereas students with high QOE can be set more challenging targets.
			IF @SystemSetting21 = 1
			BEGIN
				UPDATE #TempEnrolmentAdustedQOEFactor
				SET #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor = 1
				WHERE #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor < 1
			END
	END
	ELSE
	BEGIN

			--We are not going to adjust any Target Grades using the QOE Multiplication Factor, so for every enrolment, set the factor to 1
			INSERT #TempEnrolmentAdustedQOEFactor (EnrolmentID, QOEMultiplicationFactor)
			SELECT ID, 1 AS QOEMultiplicationFactor
			FROM #TempEnrolment

	END

	--====================
	--End of New for v1.28
	--====================

--College Structure --New for v1.36 (05/12/2023)
DECLARE @FieldName AS VARCHAR(50)= ''
SELECT @FieldName = COALESCE(
					RIGHT(SystemSettingValue.SystemSettingValue,CHARINDEX('|',REVERSE(SystemSettingValue.SystemSettingValue))-1),
					RIGHT(SystemSettingValue.DefaultValue,CHARINDEX('|',REVERSE(SystemSettingValue.DefaultValue))-1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'
DECLARE @TableName AS VARCHAR(50) = ''
SELECT @TableName = COALESCE(
					LEFT(SystemSettingValue.SystemSettingValue, CHARINDEX('|', SystemSettingValue.SystemSettingValue + '|') - 1),
					LEFT(SystemSettingValue.DefaultValue, CHARINDEX('|', SystemSettingValue.DefaultValue + '|') - 1)
					) FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'

CREATE TABLE #Temp_Enrol_CollegeStructure( [ID] [int] NOT NULL, CollegeStructure [varchar](255) NULL)

DECLARE @CollegeStructureSQL AS VARCHAR(MAX) = ''
IF @TableName = 'Enrolment' 
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Enrolment.' + @FieldName + ' AS CollegeStructure FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID'
END

IF @TableName = 'Course'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Course.' + @FieldName + ' AS CollegeStructure 
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Course ON Course.ID = Enrolment.CourseID'
END

IF @TableName = 'Student'
BEGIN
SELECT @CollegeStructureSQL = 'INSERT #Temp_Enrol_CollegeStructure (ID, CollegeStructure) SELECT #TempEnrolment.ID, Student.' + @FieldName + ' AS CollegeStructure  
								FROM #TempEnrolment INNER JOIN Enrolment ON #TempEnrolment.ID = Enrolment.ID
								INNER JOIN Student ON Student.ID = Enrolment.StudentID'
END
EXEC(@CollegeStructureSQL)

--End of College Structure

--In Year Grades - firstly, pick all that match on Course and LAim
CREATE TABLE  #TempIYGradeEnrolment
(ID INT NOT NULL, Point1_Grade VARCHAR(20) NULL, Point2_Grade VARCHAR(20) NULL, Point3_Grade VARCHAR(20) NULL, Point4_Grade VARCHAR(20) NULL, 
Point5_Grade VARCHAR(20) NULL, Point6_Grade VARCHAR(20) NULL, Point7_Grade VARCHAR(20) NULL, Point8_Grade VARCHAR(20) NULL,
Point9_Grade VARCHAR(20) NULL, Point10_Grade VARCHAR(20) NULL, Point11_Grade VARCHAR(20) NULL, Point12_Grade VARCHAR(20) NULL,
		Point1_Points DECIMAL(19,2) NULL, Point2_Points DECIMAL(19,2) NULL, Point3_Points DECIMAL(19,2) NULL, Point4_Points DECIMAL(19,2) NULL, 
		Point5_Points DECIMAL(19,2) NULL, Point6_Points DECIMAL(19,2), Point7_Points DECIMAL(19,2), Point8_Points DECIMAL(19,2),
		Point9_Points DECIMAL(19,2) NULL, Point10_Points DECIMAL(19,2), Point11_Points DECIMAL(19,2), Point12_Points DECIMAL(19,2),
		Point1_Notes VARCHAR(1024) NULL, Point2_Notes VARCHAR(1024) NULL, Point3_Notes VARCHAR(1024) NULL, Point4_Notes VARCHAR(1024) NULL, 
		Point5_Notes VARCHAR(1024) NULL, Point6_Notes VARCHAR(1024) NULL, Point7_Notes VARCHAR(1024) NULL, Point8_Notes VARCHAR(1024) NULL, 
		Point9_Notes VARCHAR(1024) NULL, Point10_Notes VARCHAR(1024) NULL, Point11_Notes VARCHAR(1024) NULL, Point12_Notes VARCHAR(1024) NULL,PersonalTargetGrade VARCHAR(255) NULL,
		Point1_EffortDescription VARCHAR(100) NULL, Point2_EffortDescription VARCHAR(100) NULL, Point3_EffortDescription VARCHAR(100) NULL,
		Point4_EffortDescription VARCHAR(100) NULL, Point5_EffortDescription VARCHAR(100) NULL, Point6_EffortDescription VARCHAR(100) NULL,
		Point7_EffortDescription VARCHAR(100) NULL, Point8_EffortDescription VARCHAR(100) NULL, Point9_EffortDescription VARCHAR(100) NULL, 
		Point10_EffortDescription VARCHAR(100) NULL,Point11_EffortDescription VARCHAR(100) NULL,Point12_EffortDescription VARCHAR(100) NULL)

INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points, 
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
	--	END) 
	END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
	--	END) 
	END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
	--	END) 
	END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
	--	END) 
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
	--	END) 
	END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
	--	END) 
	END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
	--	END) 
	END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
	--	END) 
	END) AS Point8_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
	END) AS Point9_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
	END) AS Point10_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
	END) AS Point11_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
	END) AS Point12_Points,

	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
			AND InYearGrade.LearningAimRef = Enrolment.LearningAimRef
			INNER JOIN vLearningAimCA
				ON vLearningAimCA.LearningAimRef = Enrolment.CA_LearningAimRef


--Now, for any that don't match, just match on Course
INSERT #TempIYGradeEnrolment
		(ID, Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
		Point1_Points, Point2_Points, Point3_Points, Point4_Points, Point5_Points, Point6_Points, Point7_Points, Point8_Points, Point9_Points, Point10_Points, Point11_Points, Point12_Points,
		Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, PersonalTargetGrade,
		Point1_EffortDescription, Point2_EffortDescription, Point3_EffortDescription, Point4_EffortDescription,
		Point5_EffortDescription, Point6_EffortDescription, Point7_EffortDescription, Point8_EffortDescription,
		Point9_EffortDescription, Point10_EffortDescription, Point11_EffortDescription, Point12_EffortDescription)
SELECT 
	#TempEnrolment.ID,
	InYearGrade.Point1_Grade,
	InYearGrade.Point2_Grade,
	InYearGrade.Point3_Grade,
	InYearGrade.Point4_Grade,
	InYearGrade.Point5_Grade,
	InYearGrade.Point6_Grade,
	InYearGrade.Point7_Grade,
	InYearGrade.Point8_Grade,
	InYearGrade.Point9_Grade,
	InYearGrade.Point10_Grade,
	InYearGrade.Point11_Grade,
	InYearGrade.Point12_Grade,
	--	(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
			END
	--	END) 
	END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
			END
	--	END) 
	END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
			END
	--	END) 
	END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
			END
	--	END) 
	END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
			END
	--	END) 
	END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
			END
	--	END) 
	END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
			END
	--	END) 
	END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
		(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
			END
	--	END) 
	END) AS Point8_Points,
 
	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point9_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point9_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point9_Grade)
			END
	END) AS Point9_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point10_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point10_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point10_Grade)
			END
	END) AS Point10_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point11_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point11_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point11_Grade)
			END
	END) AS Point11_Points,

	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
		ELSE
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade) IS NULL THEN
				CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade) IS NULL THEN
					(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point12_Grade)
				ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point12_Grade)
				END 
			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point12_Grade)
			END
	END) AS Point12_Points,

	Point1_Notes,
	Point2_Notes,
	Point3_Notes,
	Point4_Notes,
	Point5_Notes,
	Point6_Notes,
	Point7_Notes,
	Point8_Notes,
	Point9_Notes,
	Point10_Notes,
	Point11_Notes,
	Point12_Notes,
	PersonalTargetGrade,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point1_EffortID) AS Point1_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point2_EffortID) AS Point2_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point3_EffortID) AS Point3_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point4_EffortID) AS Point4_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point5_EffortID) AS Point5_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point6_EffortID) AS Point6_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point7_EffortID) AS Point7_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point8_EffortID) AS Point8_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point9_EffortID) AS Point9_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point10_EffortID) AS Point10_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point11_EffortID) AS Point11_EffortDescription,
	(SELECT [Description] FROM InYearGradeEffort WHERE InYearGradeEffort.ID = InYearGrade.Point12_EffortID) AS Point12_EffortDescription

FROM 
	#TempEnrolment
	INNER JOIN Enrolment
		ON #TempEnrolment.ID = Enrolment.ID
		INNER JOIN		(SELECT * FROM InYearGrade --We need to do this just in case we end up with records with unmatched LAims, so we could have "duplicate" IYG records
					INNER JOIN (SELECT Max(ID) AS MaxID FROM InYearGrade GROUP BY AcademicYearID, StudentID, CourseID) T
					ON InYearGrade.ID = T.MaxID) InYearGrade
			ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
			AND InYearGrade.StudentID = Enrolment.StudentID
			AND InYearGrade.CourseID = Enrolment.CourseID
		--INNER JOIN InYearGrade
		--	ON InYearGrade.AcademicYearID = Enrolment.AcademicYearID
		--	AND InYearGrade.StudentID = Enrolment.StudentID
		--	AND InYearGrade.CourseID = Enrolment.CourseID
			INNER JOIN vLearningAimCA
				ON vLearningAimCA.LearningAimRef = Enrolment.CA_LearningAimRef
WHERE NOT EXISTS (SELECT #TempIYGradeEnrolment.ID FROM #TempIYGradeEnrolment WHERE #TempIYGradeEnrolment.ID = #TempEnrolment.ID)





--Get the core information for the procedure...		
SELECT 

	Enrolment.ID,
	Enrolment.AcademicYearID, 
	Student.StudentRef, Student.Surname, Student.Forenames, 
	Student.ID AS StudentID,
	Enrolment.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle,
	NULL AS QualificationDescription, --QualificationLookup.QualificationDescription, 
	NULL AS WholeQualID, --QualificationLookup.WholeQualID,
	NULL AS Qualification, --QualificationLookup.WholeQualID AS Qualification,
	CASE WHEN vLearningAimCA.Size = 0 THEN 0.00001 ELSE vLearningAimCA.Size END AS Size, --CA Equiv of size, --21/03/23 AMG just in case we get a /0 error later...
	NULL AS QualificationID, --QualificationLookup.ID AS QualificationID,
	
	
	vLearningAimCA.LearningAimRefTitle AS CA_LearningAimTitle, --CA Equiv of Qualif Desc
	Enrolment.CA_LearningAimRef AS CA_LearningAimRef, --CA Equiv of WholeQualID

	vLearningAimCA.AB, --Only available for CA
	vLearningAimCA.DC, --Only available for CA
	
	'CA' AS VA_Type,
	ISNULL(vLearningAimCA.MinGrade,'') + '-' + ISNULL(vLearningAimCA.MaxGrade,'') AS GradeRange,

	CASE WHEN Enrolment.StartDate IS NULL THEN 1 --This is a bit belt and braces because the StartDate should NEVER be NULL, but so much relies on this!
	ELSE
	(CAST('20' + SUBSTRING(Enrolment.AcademicYearID,1,2) AS INT) - dbo.GetAcStartYearFromDate (Enrolment.StartDate) ) + 1 
	END AS Duration,

	vLearningAimCA.[CA_Type] AS Cohort,
	
	CASE WHEN @AcademicYearNo>=2018 THEN #TempQOEPointsAll.QOEPointsfrom1718 ELSE #TempQOEPointsAll.QOEPoints END AS QOEPoints_College,--Vocational (from 18/19, show new QOE  points scale)
	NULL AS QOEPoints_GCSE_College,--Academic

	NULL AS QOEPoints_Final, --CASE WHEN CohortLookup.CohortName IN ('Applied General', 'None') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_Final, --Vocational
	NULL AS QOEPoints_GCSE_Final, --CASE WHEN Cohortlookup.CohortName IN ('A Level', 'Academic') THEN L3VAStudent.PriorAttainment ELSE NULL END AS QOEPoints_GCSE_Final, --Academic

	(SELECT vLearningAim_CA_National.AverageAttainment --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the vLAImCA_Nat record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN vLearningAim_CA_National ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
              )
	) AS EstPoints_AcYrMin3,
	 
	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYrMin2,

	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYrMin1,

	(SELECT AcademicYear.AcademicYearID 
	FROM AcademicYear
	INNER JOIN (SELECT MAX(AcademicYearNo) AS MAXAcademicYearNo FROM vLearningAim_CA_National v INNER JOIN AcademicYear ON v.AcademicYearID = AcademicYear.AcademicYearID WHERE v.LearningAimRef = Enrolment.CA_LearningAimRef AND AcademicYear.AcademicYearNo < @AcademicYearNo) T
	ON T.MAXAcademicYearNo = AcademicYear.AcademicYearNo) AS MostRecentNationalDataYear,



	(SELECT vLearningAim_CA_National.AverageAttainment --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	--28/06/2019 - in preparation for more than 3 years national data, look for the academic year with data 3 or more years old - whatever is the most recent.
	--WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	AND A.AcademicYearNo =
              (SELECT --find the max academicyearnumber for the vLAImCA_Nat record older or equal to 3 years ago (i.e. if we are in 18/19, does it appear in 15/16 or 14/15 or 13/14 etc.)
              Max(AcademicYearNo) 
              FROM AcademicYear A
              INNER JOIN vLearningAim_CA_National ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
              AND A.AcademicYearNo <= (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 3 --the max year equal to or older than 3 years ago
              AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
              )
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin3_MultipliedByQOEFactor,
	 
	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 2
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin2_MultipliedByQOEFactor,

	(SELECT vLearningAim_CA_National.AverageAttainment  --v1.28.0 --We need the EstPoints * QOE Multiplication Factor
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID) - 1
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) * #TempEnrolmentAdustedQOEFactor.QOEMultiplicationFactor AS EstPoints_AcYrMin1_MultipliedByQOEFactor,




	/*NEW*/	(SELECT vLearningAim_CA_National.AverageAttainment --v1.4.0. used to be vLearningAim_CA_National.Size * vLearningAim_CA_National.AverageAttainment *10
	FROM vLearningAim_CA_National 
	INNER JOIN AcademicYear A ON vLearningAim_CA_National.AcademicYearID = A.AcademicYearID
	WHERE A.AcademicYearNo = (SELECT AcademicYear.AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID)
	AND vLearningAim_CA_National.LearningAimRef = Enrolment.CA_LearningAimRef
	) AS EstPoints_AcYr,
	
	vKS5Aim_L2L3CAStudent.NationalAvg AS EstPoints_L3VAStu, --L3VAStudent.EstimatedPoints AS EstPoints_L3VAStu, --v1.4.0
	vKS5Aim_L2L3CAStudent.Points AS ActPoints_L3VAStu, --L3VAStudent.ActualPoints AS ActPoints_L3VAStu, --v1.4.0
	vKS5Aim_L2L3CAStudent.Diff AS VAScore_L3VAStu, --L3VAStudent.ValueAddedScore AS VAScore_L3VAStu, --v1.4.0
	 
	--All the available Enrolment Fields:
	Enrolment.StartDate,
	Enrolment.PlannedEndDate,
	Enrolment.ActualEndDate,
	Enrolment.CompletionID,
	Enrolment.Grade AS EnrolmentGrade,
	--To calculate enrolment points: (Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN
		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade) IS NULL
		THEN
			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade) IS NULL
			THEN
				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade2 = Enrolment.Grade)
			ELSE
				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade)
			END
		ELSE
			(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade)
		END
	ELSE
		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade) IS NULL
		THEN
			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade) IS NULL
			THEN
				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade2 = Enrolment.Grade)
			ELSE
				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.ALtGrade = Enrolment.Grade)
			END
		ELSE
			(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = Enrolment.Grade)
		END
	END
	AS EnrolmentPoints,	

	Enrolment.UserDefinedString1 AS EnrolmentUserDefinedString1,
	Enrolment.UserDefinedString2 AS EnrolmentUserDefinedString2,
	Enrolment.UserDefinedString3 AS EnrolmentUserDefinedString3,
	Enrolment.UserDefinedString4 AS EnrolmentUserDefinedString4,
	Enrolment.UserDefinedNumber AS EnrolmentUserDefinedNumber, 
	Enrolment.UserDefinedDate AS EnrolmentUserDefinedDate,
	Enrolment.UserDefinedString5 AS EnrolmentUserDefinedString5,
	Enrolment.UserDefinedString6 AS EnrolmentUserDefinedString6,
	Enrolment.UserDefinedString7 AS EnrolmentUserDefinedString7,
	Enrolment.UserDefinedString8 AS EnrolmentUserDefinedString8,
	Enrolment.UserDefinedNumber2 AS EnrolmentUserDefinedNumber2,
	Enrolment.TeachingGroupCode,
	Course.CourseCode, --**OK 7/7/17
	Course.Title AS CourseTitle, --**OK 7/7/17
		Course.UserDefinedString1 AS CourseUserDefinedString1, 
	Course.UserDefinedString2 AS CourseUserDefinedString2,
	Course.UserDefinedString3 AS CourseUserDefinedString3,
	Course.UserDefinedString4 AS CourseUserDefinedString4,
	--All the available Student Fields:
	Student.DOB,
	Ethnicity.Code As EthnicityCode,
	Ethnicity.[Definition] AS EthnicityDefinition,
	Student.Gender,
	Student.TutorGroupCode,
	Student.UserDefinedString1 AS StudentUserDefinedString1, 
	Student.UserDefinedString2 AS StudentUserDefinedString2,
	Student.UserDefinedString3 AS StudentUserDefinedString3,
	Student.UserDefinedString4 AS StudentUserDefinedString4,
	Student.UserDefinedNumber AS StudentUserDefinedNumber,
	Student.UserDefinedString5 AS StudentUserDefinedString5, 
	Student.UserDefinedString6 AS StudentUserDefinedString6,
	Student.UserDefinedString7 AS StudentUserDefinedString7,
	Student.UserDefinedString8 AS StudentUserDefinedString8,
	Student.UserDefinedNumber2 AS StudentUserDefinedNumber2,
	Student.UserDefinedDate AS StudentUserDefinedDate,
	LLDDandHealthProblem.Code AS LLDDandHealthProblemCode,
	LLDDandHealthProblem.[Definition] AS LLDDandHealthProblemDefinition,
	Student.FreeSchoolMeal,
	NULL AS QualifcationCodeLookupID, --QualificationCodeLookup.ID AS QualifcationCodeLookupID,
	vLearningAimCA.GradeBoundaryInflation AS GradeBoundaryInflation, --QualificationCodeLookup.GradeBoundaryInflation,
	ISNULL(vLearningAimCA.LearningAimRef,'') + ' - ' + ISNULL(vLearningAimCA.LearningAimRefTitle,'') AS QualificationCodeandName,
	NULL AS SubjectCode, --(SELECT SL.SubjectCode FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectCode, --** 7/7/17 Added
	NULL AS SubjectName, --(SELECT SL.SubjectName FROM SubjectLookup SL WHERE SL.ID = QualificationLookup.SubjectID) AS SubjectName, --** 7/7/17 Added

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 'U' ELSE InYearGrade.Point1_Grade END) AS Point1_Grade, --If enrolment is withdrawn, it is a U automatically
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 'U' ELSE InYearGrade.Point2_Grade END) AS Point2_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 'U' ELSE InYearGrade.Point3_Grade END) AS Point3_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 'U' ELSE InYearGrade.Point4_Grade END) AS Point4_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 'U' ELSE InYearGrade.Point5_Grade END) AS Point5_Grade, --Added 01/07/2019
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 'U' ELSE InYearGrade.Point6_Grade END) AS Point6_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 'U' ELSE InYearGrade.Point7_Grade END) AS Point7_Grade,
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 'U' ELSE InYearGrade.Point8_Grade END) AS Point8_Grade,

	#TempIYGradeEnrolment.Point1_Grade,
	#TempIYGradeEnrolment.Point2_Grade,
	#TempIYGradeEnrolment.Point3_Grade,
	#TempIYGradeEnrolment.Point4_Grade,
	#TempIYGradeEnrolment.Point5_Grade,
	#TempIYGradeEnrolment.Point6_Grade,
	#TempIYGradeEnrolment.Point7_Grade,
	#TempIYGradeEnrolment.Point8_Grade,
	#TempIYGradeEnrolment.Point9_Grade,
	#TempIYGradeEnrolment.Point10_Grade,
	#TempIYGradeEnrolment.Point11_Grade,
	#TempIYGradeEnrolment.Point12_Grade,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point1_Grade IS NULL THEN 0 ELSE --If enrolment is withdrawn, it is 0 points automatically
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point1_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point1_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point1_Grade)
	--		END
	--	END) 
	--END) AS Point1_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point2_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point2_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point2_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point2_Grade)
	--		END
	--	END) 
	--END) AS Point2_Points,
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point3_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point3_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point3_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point3_Grade)
	--		END
	--	END) 
	--END) AS Point3_Points, 
	
	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point4_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point4_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point4_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point4_Grade)
	--		END
	--	END) 
	--END) AS Point4_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point5_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point5_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point5_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point5_Grade)
	--		END
	--	END) 
	--END) AS Point5_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point6_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point6_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point6_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point6_Grade)
	--		END
	--	END) 
	--END) AS Point6_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point7_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point7_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point7_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point7_Grade)
	--		END
	--	END) 
	--END) AS Point7_Points,

	--(CASE WHEN CompletionID = 3 AND InYearGrade.Point8_Grade IS NULL THEN 0 ELSE 
	--	(CASE WHEN vLearningAimCA.[CA_Type] IN('Tech Level', 'L3 CA') THEN --(Modified 1.4.0 to take into account the different Points schemes for Tech Level and Tech Certs..)
	--		CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
	--				(SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
	--			ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
	--		END
	--	ELSE
	--		CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade) IS NULL THEN
	--			CASE WHEN (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade) IS NULL THEN
	--				(SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade2 = InYearGrade.Point8_Grade)
	--			ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.AltGrade = InYearGrade.Point8_Grade)
	--			END 
	--		ELSE (SELECT CA_QTG.CAL2Points FROM CA_QualType_Grade CA_QTG WHERE CA_QTG.CA_QualTypeID = vLearningAimCA.CA_QualTypeID AND CA_QTG.Grade = InYearGrade.Point8_Grade)
	--		END
	--	END) 
	--END) AS Point8_Points,

	#TempIYGradeEnrolment.Point1_Points, 
	#TempIYGradeEnrolment.Point2_Points, 
	#TempIYGradeEnrolment.Point3_Points, 
	#TempIYGradeEnrolment.Point4_Points, 
	#TempIYGradeEnrolment.Point5_Points, 
	#TempIYGradeEnrolment.Point6_Points, 
	#TempIYGradeEnrolment.Point7_Points, 
	#TempIYGradeEnrolment.Point8_Points,
	#TempIYGradeEnrolment.Point9_Points, 
	#TempIYGradeEnrolment.Point10_Points, 
	#TempIYGradeEnrolment.Point11_Points, 
	#TempIYGradeEnrolment.Point12_Points,
	#TempIYGradeEnrolment.Point1_Notes, 
	#TempIYGradeEnrolment.Point2_Notes, 
	#TempIYGradeEnrolment.Point3_Notes, 
	#TempIYGradeEnrolment.Point4_Notes, 
	#TempIYGradeEnrolment.Point5_Notes, 
	#TempIYGradeEnrolment.Point6_Notes, 
	#TempIYGradeEnrolment.Point7_Notes, 
	#TempIYGradeEnrolment.Point8_Notes,
	#TempIYGradeEnrolment.Point9_Notes, 
	#TempIYGradeEnrolment.Point10_Notes, 
	#TempIYGradeEnrolment.Point11_Notes, 
	#TempIYGradeEnrolment.Point12_Notes,
	#TempIYGradeEnrolment.PersonalTargetGrade,

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = Student.AcademicYearID ) + '0831' AS DateTime),
	Student.DOB
	)) AS AgeOn31Aug,
	vLearningAimCA.CA_QualTypeID,

	(SELECT ABAcronym FROM QAN_AB WHERE QAN_AB.AB = vLearningAimCA.AB) AS ABAcronym,
	(SELECT DCName FROM QAN_DC WHERE QAN_DC.DC = vLearningAimCA.DC) AS DCName,
	CAST((SELECT Map FROM QAN_DC WHERE QAN_DC.DC = vLearningAimCA.DC) AS VARCHAR(4)) AS DCType,
	(SELECT CA_QualType.IsGraded FROM CA_QualType WHERE CA_QualType.ID = vLearningAimCA.CA_QualTypeID) AS IsGraded,
	Enrolment.ID AS EnrolmentID,
	Enrolment.MappingInfo,
	Enrolment.OutcomeID,
	(CASE Enrolment.OutcomeID WHEN 1 THEN 'Achieved' WHEN 2 THEN 'Partial Ach.' WHEN 3 THEN 'Not Achieved' WHEN 8 THEN 'Not Known' ELSE NULL END) AS OutcomeDescription,
	Enrolment.TeachingGroupTitle,
	vLearningAimCA.[CA_Type] AS CA_Type,
	#TempIYGradeEnrolment.Point1_EffortDescription,
	#TempIYGradeEnrolment.Point2_EffortDescription,
	#TempIYGradeEnrolment.Point3_EffortDescription,
	#TempIYGradeEnrolment.Point4_EffortDescription,
	#TempIYGradeEnrolment.Point5_EffortDescription,
	#TempIYGradeEnrolment.Point6_EffortDescription,
	#TempIYGradeEnrolment.Point7_EffortDescription,
	#TempIYGradeEnrolment.Point8_EffortDescription,
	#TempIYGradeEnrolment.Point9_EffortDescription,
	#TempIYGradeEnrolment.Point10_EffortDescription,
	#TempIYGradeEnrolment.Point11_EffortDescription,
	#TempIYGradeEnrolment.Point12_EffortDescription

INTO #TempMain

FROM Student 
		LEFT JOIN #TempQOEPointsAll
		ON Student.ID = #TempQOEPointsAll.ID
			INNER JOIN Enrolment 
			ON Student.ID = Enrolment.StudentID
				INNER JOIN #TempEnrolment
				ON Enrolment.ID = #TempEnrolment.ID
					LEFT JOIN LearningAim 
					ON LearningAim.LearningAimRef = Enrolment.LearningAimRef
						LEFT JOIN  #TempEnrolmentAdustedQOEFactor --Added v1.28.0
						ON  #TempEnrolmentAdustedQOEFactor.EnrolmentID = Enrolment.ID
						LEFT JOIN vLearningAimCA
						ON Enrolment.CA_LearningAimRef = vLearningAimCA.LearningAimRef
						--AND Enrolment.AcademicYearID = vLearningAim_CA_National.LearningAimRef
							LEFT JOIN vKS5Aim_L2L3CAStudent --Added v1.4.0
							ON vKS5Aim_L2L3CAStudent.AcademicYearID = Enrolment.AcademicYearID
							AND LTRIM(RTRIM(vKS5Aim_L2L3CAStudent.QualificationNumber)) = Enrolment.LearningAimRef
							AND vKS5Aim_L2L3CAStudent.StudentID = Enrolment.StudentID
								LEFT JOIN Course
								ON Course.ID = Enrolment.CourseID
								LEFT JOIN Ethnicity
								ON Ethnicity.ID = Student.EthnicityID
								LEFT JOIN LLDDandHealthProblem
								ON LLDDandHealthProblem.ID = Student.LLDDandHealthProblemID
								--LEFT JOIN InYearGrade
								--ON Enrolment.StudentID = InYearGrade.StudentID
								--AND Enrolment.AcademicYearID = InYearGrade.AcademicYearID
								--AND Enrolment.CourseID = InYearGrade.CourseID
								LEFT JOIN #TempIYGradeEnrolment
								ON #TempEnrolment.ID = #TempIYGradeEnrolment.ID
WHERE 
	Enrolment.AcademicYearID = @AcademicYearID
	AND LEN(ISNULL(Enrolment.CA_LearningAimRef,'')) > 0-- IS NOT NULL --only pull those Enrolment records mapped to a CA Learning Aim
	AND Enrolment.QualificationID IS NULL --if L3VA QualificationID is mapped, do not include recs!

-----------------------------------------------------------------------------------------
--V1.30 - find any Targets set for a "frozen" year. If we find any, then use them here.--
-----------------------------------------------------------------------------------------
--SELECT * FROM #TempEnrolment WHERE ID IN (119147, 119150, 119159, 186304)
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @AcademicYearNo INTEGER
--SELECT @AcademicYearID = '18/19'
--SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID
CREATE TABLE #TempEnrolmentFrozenTargets (ID INTEGER NOT NULL, MostRecentCollegeEstGrade VARCHAR(10) NULL, MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL, AcademicYearID VARCHAR(5) NULL)

--A list of students and LearningAims who have a frozen Target grade in the year before this...
SELECT StudentRef, T2.AcademicYearID, T2.LearningAimRef
INTO #TempStudentsWithFrozenGrades_LA
FROM
(
		SELECT T.StudentRef, T.LearningAimRef, T.AcademicYearID
		, row_number() OVER(PARTITION BY T.StudentRef, T.LearningAimref ORDER BY MIN(T.AcademicYearNo) ASC) AS rn
		FROM 
		(
			SELECT DISTINCT Enrolment.StudentRef, Enrolment.LearningAimRef, Enrolment.AcademicYearID, (SELECT AcademicYearNo FROM AcademicYear WHERE AcademicYearID = Enrolment.AcademicYearID) AS AcademicYearNo
			FROM
				(SELECT Enrolment.ID
				FROM Enrolment
					INNER JOIN FreezeTargetGradeForFutureYears
					ON FreezeTargetGradeForFutureYears.StudentRef = Enrolment.StudentRef
					AND FreezeTargetGradeForFutureYears.AcademicYearID = Enrolment.AcademicYearID
					AND FreezeTargetGradeForFutureYears.LearningAimRef = Enrolment.LearningAimRef
						INNER JOIN AcademicYear ON FreezeTargetGradeForFutureYears.AcademicYearID  = AcademicYear.AcademicYearID
						AND AcademicYear.AcademicYearNo < @AcademicYearNo
						--AND Enrolment.StudentRef = '30134455'
						AND Enrolment.StudentRef IN (SELECT DISTINCT StudentRef FROM Enrolment INNER JOIN #TempEnrolment ON Enrolment.ID = #TempEnrolment.ID)
				) Frozen
			INNER JOIN Enrolment ON Frozen.ID = Enrolment.ID
		) T
		INNER JOIN Enrolment ON Enrolment.StudentRef = T.StudentRef
		
		GROUP BY T.StudentRef, T.AcademicYearID, T.LearningAimRef
) T2
WHERE T2.rn = 1

--Now we know the frozen records, we need the target grades from the EstActVA table
SELECT DISTINCT
	#TempStudentsWithFrozenGrades_LA.StudentRef, #TempStudentsWithFrozenGrades_LA.AcademicYearID, #TempStudentsWithFrozenGrades_LA.LearningAimRef,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstPoints, EstActVA.MostRecentCollegeEstGradeInflated
INTO
	#TempStudentsWithFrozenGrades_WithTargets_LA
FROM
	EstActVA
		INNER JOIN #TempStudentsWithFrozenGrades_LA
		ON EstActVA.StudentRef = #TempStudentsWithFrozenGrades_LA.StudentRef
		AND EstActVA.LearningAimRef = #TempStudentsWithFrozenGrades_LA.LearningAimRef
		AND EstActVA.AcademicYearID = #TempStudentsWithFrozenGrades_LA.AcademicYearID

--Now we know the target grades from the frozen records, pull these frozen target grades from the previous years in EstActVA and apply them to the current year
INSERT #TempEnrolmentFrozenTargets (ID, MostRecentCollegeEstGrade, MostRecentCollegeEstPoints, MostRecentCollegeEstGradeInflated, AcademicYearID)
SELECT 
	Enrolment.ID, #TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGrade,
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstPoints, 
	#TempStudentsWithFrozenGrades_WithTargets_LA.MostRecentCollegeEstGradeInflated,
	#TempStudentsWithFrozenGrades_WithTargets_LA.AcademicYearID
FROM
	Enrolment
		INNER JOIN #TempStudentsWithFrozenGrades_WithTargets_LA
		ON Enrolment.StudentRef = #TempStudentsWithFrozenGrades_WithTargets_LA.StudentRef
			INNER JOIN Course
			ON Course.ID = Enrolment.CourseID
			AND #TempStudentsWithFrozenGrades_WithTargets_LA.LearningAimRef = Enrolment.LearningAimRef
			AND Enrolment.AcademicYearID = @AcademicYearID


--#TempMostRecentCollegeEstPoints has been used long before v1.30, but is useful to store MostRecentCollegeEstPointsMultipliedByQOEFactor & MostRecentCollegeEstGradeInflated

--Get the MostRecentPoints into a Temp table 
CREATE TABLE #TempMostRecentCollegeEstPoints (ID INTEGER NOT NULL,  MostRecentCollegeEstPoints DECIMAL(19,14) NULL, MostRecentCollegeEstPointsMultipliedByQOEFactor DECIMAL(19,14) NULL, MostRecentCollegeEstGradeInflated VARCHAR(10) NULL)

INSERT #TempMostRecentCollegeEstPoints (ID, MostRecentCollegeEstPoints, MostRecentCollegeEstPointsMultipliedByQOEFactor, MostRecentCollegeEstGradeInflated)
SELECT
	#TempMain.ID,
	(CASE WHEN #TempMain.EstPoints_AcYrMin1 IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2 IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3
		ELSE  
			#TempMain.EstPoints_AcYrMin2
		END) 
	ELSE  
		EstPoints_AcYrMin1
	END) AS MostRecentCollegeEstPoints,

	(CASE WHEN #TempMain.EstPoints_AcYrMin1_MultipliedByQOEFactor IS NULL THEN 
		(CASE WHEN #TempMain.EstPoints_AcYrMin2_MultipliedByQOEFactor IS NULL THEN 
			#TempMain.EstPoints_AcYrMin3_MultipliedByQOEFactor
		ELSE  
			#TempMain.EstPoints_AcYrMin2_MultipliedByQOEFactor
		END) 
	ELSE  
		EstPoints_AcYrMin1_MultipliedByQOEFactor
	END) AS MostRecentCollegeEstPointsMultipliedByQOEFactor,
	NULL AS MostRecentCollegeEstGradeInflated
FROM 
	#TempMain

--------------------------------------------------------------------------------------------------------------------------------
-- v1.30 Now we have the frozen target data in the #TempEnrolmentFrozenTargets table, populate #TempMostRecentCollegeEstPoints--
--------------------------------------------------------------------------------------------------------------------------------
--Substitute the MostRecentPoints with the Frozen MostRecentPoints held in #TempEnrolmentFrozenTargets
UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints = #TempEnrolmentFrozenTargets.MostRecentCollegeEstPoints
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID

UPDATE #TempMostRecentCollegeEstPoints SET #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated = ISNULL(#TempEnrolmentFrozenTargets.MostRecentCollegeEstGradeInflated,'')
FROM #TempMostRecentCollegeEstPoints
INNER JOIN #TempEnrolmentFrozenTargets
ON #TempMostRecentCollegeEstPoints.ID = #TempEnrolmentFrozenTargets.ID


--This is the start of getting the Most Recent InYear Grade / Points in...
--v1.32.  A CASE statement can only be nested 10 levels deep, therefore here, we only go 10 levels deep.
--and place the values into #TempMostRecentInYearPointsGrades_1.  Then, in the next section, populate #TempMostRecentInYearPointsGrades
--by going 2 levels deeper again!
SELECT 
	#TempMain.ID,
	#TempMain.Point2_Grade,
	#TempMain.Point1_Grade,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Grade
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Grade 
										--	ELSE #TempMain.Point2_Grade END)
										--ELSE #TempMain.Point3_Grade END)
									ELSE #TempMain.Point4_Grade END)
								ELSE #TempMain.Point5_Grade END)
							ELSE #TempMain.Point6_Grade END)
						ELSE #TempMain.Point7_Grade END)
					ELSE #TempMain.Point8_Grade END) 
				ELSE #TempMain.Point9_Grade END)
			ELSE #TempMain.Point10_Grade END)
		ELSE #TempMain.Point11_Grade END)
	ELSE #TempMain.Point12_Grade END) 
	AS IYMostRecentGrade,

	#TempMain.Point2_Points,
	#TempMain.Point1_Points,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										#TempMain.Point3_Points
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		#TempMain.Point1_Points 
										--	ELSE #TempMain.Point2_Points END)
										--ELSE #TempMain.Point3_Points END)
									ELSE #TempMain.Point4_Points END) 
								ELSE #TempMain.Point5_Points END)
							ELSE #TempMain.Point6_Points END)
						ELSE #TempMain.Point7_Points END)
					ELSE #TempMain.Point8_Points END)
				ELSE #TempMain.Point9_Points END)
			ELSE #TempMain.Point10_Points END)
		ELSE #TempMain.Point11_Points END)
	ELSE #TempMain.Point12_Points END) 
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(#TempMain.Point12_Grade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMain.Point11_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMain.Point10_Grade,'') = '' THEN
				(CASE WHEN ISNULL(#TempMain.Point9_Grade,'') = '' THEN
					(CASE WHEN ISNULL(#TempMain.Point8_Grade,'') = '' THEN
						(CASE WHEN ISNULL(#TempMain.Point7_Grade,'') = '' THEN
							(CASE WHEN ISNULL(#TempMain.Point6_Grade,'') = '' THEN
								(CASE WHEN ISNULL(#TempMain.Point5_Grade,'') = '' THEN
									(CASE WHEN ISNULL(#TempMain.Point4_Grade,'') = '' THEN
										'Pt.3'
										--(CASE WHEN ISNULL(#TempMain.Point3_Grade,'') = '' THEN
										--	(CASE WHEN ISNULL(#TempMain.Point2_Grade,'') = '' THEN
										--		(CASE WHEN ISNULL(#TempMain.Point1_Grade,'') = '' THEN
										--			'' 
										--		ELSE 'Pt.1' END)
										--	ELSE 'Pt.2' END)
										--ELSE 'Pt.3' END)
									ELSE 'Pt.4' END)
								ELSE 'Pt.5' END)
							ELSE 'Pt.6' END)
						ELSE 'Pt.7' END)
					ELSE 'Pt.8' END)
				ELSE 'Pt.9' END)
			ELSE 'Pt.10' END)
		ELSE 'Pt.11' END)
	ELSE 'Pt.12' END) 
	AS IYMostRecentPoint
INTO			
	#TempMostRecentInYearPointsGrades_1
FROM
	#TempMain
	

SELECT 
#TempMostRecentInYearPointsGrades_1.ID,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Grade 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Grade END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentGrade END)
	AS IYMostRecentGrade,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			#TempMostRecentInYearPointsGrades_1.Point1_Points 
		ELSE #TempMostRecentInYearPointsGrades_1.Point2_Points END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoints END)
	AS IYMostRecentPoints,

	(CASE WHEN ISNULL(IYMostRecentGrade,'') = '' THEN
		(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point2_Grade,'') = '' THEN
			(CASE WHEN ISNULL(#TempMostRecentInYearPointsGrades_1.Point1_Grade,'') = '' THEN
				'' 
			ELSE 'Pt.1' END)
		ELSE 'Pt.2' END)
	ELSE #TempMostRecentInYearPointsGrades_1.IYMostRecentPoint END)
	AS IYMostRecentPoint

INTO
#TempMostRecentInYearPointsGrades
FROM
#TempMostRecentInYearPointsGrades_1

--This last bit does a few calcs based upon the information pulled out from the Main part of the proedure.
--Doing it here at the end saves complication and duplication, so hopefully it is more efficient	
--select * from #TempMain
SELECT
	#TempMain.ID,
	#TempMain.AcademicYearID,
	#TempMain.StudentRef,
	#TempMain.Surname,
	#TempMain.Forenames,
	#TempMain.LearningAimRef,
	#TempMain.LearningAimTitle,
	#TempMain.QualificationDescription,
	#TempMain.WholeQualID,
	#TempMain.size,
	#TempMain.QualificationID,

	#TempMain.Duration,
	#TempMain.Cohort,
	CAST(#TempMain.QOEPoints_College AS DECIMAL(19,2)) AS QOEPoints_College2dp,
	CAST(#TempMain.QOEPoints_GCSE_College AS DECIMAL(19,2)) AS QOEPoints_GCSE_College2dp,
	CAST(#TempMain.QOEPoints_Final AS DECIMAL(19,2)) AS QOEPoints_Final2dp,
	CAST(#TempMain.QOEPoints_GCSE_Final AS DECIMAL(19,2)) AS QOEPoints_GCSE_Final2dp,
	CAST(#TempMain.EstPoints_AcYrMin3 AS DECIMAL(19,2)) AS EstPoints_AcYrMin32dp,
	CAST(#TempMain.EstPoints_AcYrMin2 AS DECIMAL(19,2)) AS EstPoints_AcYrMin22dp,
	CAST(#TempMain.EstPoints_AcYrMin1 AS DECIMAL(19,2)) AS EstPoints_AcYrMin12dp,

	CAST(#TempMain.EstPoints_L3VAStu AS DECIMAL(19,2)) AS EstPoints_L3VAStu2dp,
	CAST(#TempMain.ActPoints_L3VAStu AS DECIMAL(19,2)) AS ActPoints_L3VAStu2dp,
	CAST(#TempMain.VAScore_L3VAStu AS DECIMAL(19,2)) AS VAScore_L3VAStu2dp,
	
	CASE #TempMain.AcademicYearID WHEN '17/18' THEN 'EstPoints_AcYrMin2'
	ELSE
		CASE Duration	WHEN 1 THEN 'EstPoints_AcYrMin2'
						ELSE 'EstPoints_AcYrMin3' --changed from 'WHEN 2 THEN' to ELSE
		END
	END AS HighlightPurple,
	
	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3, #TempMain.Cohort)
	) AS EstGrade_AcYrMin3,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) 
	) AS EstGrade_AcYrMin2,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort)
	) AS EstGrade_AcYrMin1,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin3,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin2,

	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1_MultipliedByQOEFactor, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYrMin1,

	--most recent estimated college grade - if 1 is null, choose 2 if 2 is null choose 3...
	--(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) IS NULL THEN 
	--	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3, #TempMain.Cohort) 
	--	ELSE  
	--	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort)
	--	END) 
	--ELSE  
	--dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) 
	--END) AS MostRecentCollegeEstGrade,
	--simplified v1.30:
	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints, #TempMain.Cohort)
	) AS MostRecentCollegeEstGrade,


	--most recent estimated college grade (Inflated)- if 1 is null, choose 2 if 2 is null choose 3...
	--Altered v1.28 - Inflated Grade now multiplied by QOE Factor
	--(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1, #TempMain.Cohort) IS NULL THEN 
	--	(CASE WHEN dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2, #TempMain.Cohort) IS NULL THEN 
	--	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin3_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation)
	--	ELSE  
	--	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin2_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation)
	--	END) 
	--ELSE  
	--dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYrMin1_MultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation) 
	--END) AS MostRecentCollegeEstGradeInflated,
	--simplified v1.30:  If the Inflated Grade is NULL, in #TempMostRecentCollegeEstPoints, then it is not to be overwritten by a frozen grade
	(CASE WHEN #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated IS NULL 
	THEN
		(SELECT 
		dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPointsMultipliedByQOEFactor, #TempMain.Cohort) , GradeBoundaryInflation) 
		) 
	ELSE #TempMostRecentCollegeEstPoints.MostRecentCollegeEstGradeInflated END) AS MostRecentCollegeEstGradeInflated,

	Null AS Blank, --This is intentional because it is used by the Target Export routine.

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_L3VAStu, #TempMain.Cohort)
	) AS EstGrade_L3VAStu,

	(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, ActPoints_L3VAStu, #TempMain.Cohort)
	) AS ActGrade_L3VAStu,

	CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CAST(((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
	END AS VAScore_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CAST(((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
	END AS VAScore_vs_Adj2dp,
	
	CASE Duration	WHEN 1 THEN (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN 'EstPoints_AcYrMin2' ELSE 'EstPoints_AcYrMin1' END)
					ELSE (CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN 'EstPoints_AcYrMin3' ELSE 'EstPoints_AcYrMin2' END) ELSE 'EstPoints_AcYrMin1' END) --It is 2 or more years
	END AS HighlightYellow,
	
	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((ActPoints_L3VAStu - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  --It is 2 or more years
	END AS VAScore_vs_Orig,

	CASE Duration	WHEN 1 THEN ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((ActPoints_L3VAStu - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS VAScore_vs_Adj,

	--For these below, we may need to reinstate size...
		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig2dp,

		CASE Duration	WHEN 1 THEN CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
						ELSE CAST(((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj2dp,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
						ELSE ((EnrolmentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
		END 
	AS EnrolmentGradeVAScore_vs_Orig,

		CASE Duration	WHEN 1 THEN ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
						ELSE ((EnrolmentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
		END
	AS EnrolmentGradeVAScore_vs_Adj,

	#TempMain.VAScore_L3VAStu / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS VAScore_L3VAStu,
	#TempMain.QOEPoints_College,
	#TempMain.QOEPoints_GCSE_College,
	#TempMain.QOEPoints_Final,
	#TempMain.QOEPoints_GCSE_Final,

	#TempMain.EstPoints_AcYrMin3,
	#TempMain.EstPoints_AcYrMin2,
	#TempMain.EstPoints_AcYrMin1,
	#TempMain.EstPoints_L3VAStu,
	#TempMain.ActPoints_L3VAStu,

	--All the available Enrolment Fields:
	StartDate,
	PlannedEndDate,
	ActualEndDate,
	CompletionID,
	EnrolmentGrade,
	EnrolmentPoints,
	EnrolmentUserDefinedString1,
	EnrolmentUserDefinedString2,
	EnrolmentUserDefinedString3,
	EnrolmentUserDefinedString4,
	EnrolmentUserDefinedNumber,
	EnrolmentUserDefinedDate,
	CourseCode,
	CourseTitle,
	--All the available Student Fields:
	DOB,
	EthnicityCode,
	EthnicityDefinition,
	EthnicityCode + ' - ' + ISNULL(EthnicityDefinition,'') AS Ethnicity, --** 7/7/17 Added
	Gender,
	TutorGroupCode,
	StudentUserDefinedString1,
	StudentUserDefinedString2,
	StudentUserDefinedString3,
	StudentUserDefinedString4,
	StudentUserDefinedNumber,
	StudentUserDefinedDate,
	LLDDandHealthProblemCode,
	LLDDandHealthProblemDefinition,
	LLDDandHealthProblemCode + ' - ' + ISNULL(LLDDandHealthProblemDefinition,'') AS LLDDandHealthProblem, --** 7/7/17 Added
	FreeSchoolMeal,
	(SELECT Completion.[Description] FROM Completion WHERE CompletionID = Completion.ID) AS CompletionDescription,
	Qualification, --**7/7/17 Added
	QualificationCodeandName, --** 7/7/17 Added
	ISNULL(SubjectCode,'') + ' - ' + ISNULL(SubjectName,'') AS SubjectCodeandName, --** 7/7/17 Added
	Point1_Grade,
	Point2_Grade,
	Point3_Grade,
	Point4_Grade,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,

	--For these below, we may need to reinstate size...
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE  CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point1_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point1_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN CAST(((Point2_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point2_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point3_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point3_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig2dp,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((Point4_Points - EstPoints_AcYrMin2)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((Point4_Points - EstPoints_AcYrMin3)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point1_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point1_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point1_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point1_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point2_Points - EstPoints_AcYrMin3) IS NULL--It is 2 or more years
						THEN ((Point2_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point2_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point2_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point3_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point3_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point3_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point3_vs_Orig,
	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (Point4_Points - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN ((Point4_Points - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size)
						ELSE ((Point4_Points - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size) --It is 2 or more years
						END --NEW
	END AS Point4_vs_Orig,
		
	CASE Duration	WHEN 1 THEN CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point1_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point2_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point3_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS Point4_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point1_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point1_vs_Adj,

	CASE Duration	WHEN 1 THEN ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point2_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point2_vs_Adj,
	
	CASE Duration	WHEN 1 THEN ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point3_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN  EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point3_vs_Adj,
	
	CASE Duration	WHEN 1 THEN ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((Point4_Points - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS Point4_vs_Adj,

	AgeOn31Aug,

	--The new fields needed now that CA is included:
	CA_LearningAimTitle, --CA Equiv of Qualif Desc
	CA_LearningAimRef, --CA Equiv of WholeQualID
	AB, --Only available for CA
	DC, --Only available for CA
	#TempMain.ABAcronym AS ABAcronym,
	#TempMain.DCName AS DCName,
	#TempMain.DCType AS DCType,
	VA_Type,
	GradeRange,
	--Added so we can work out the census point for w/d enrols
	CASE #TempMain.CompletionID WHEN '3' THEN DATEDIFF(dd, #TempMain.StartDate, #TempMain.ActualEndDate) ELSE NULL END AS WDNumDaysAfterStart, --Only show days for Withdrawn status
	--Added so we can show the current ac yr stats
	/*NEW*/	CAST(#TempMain.EstPoints_AcYr AS DECIMAL(19,2)) AS EstPoints_AcYr2dp,
	/*NEW*/	#TempMain.EstPoints_AcYr AS EstPoints_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYr, #TempMain.Cohort)
	) AS EstGrade_AcYr,
	/*NEW*/(SELECT 
	dbo.fn_CA_CalculateGradeInflation(CA_QualTypeID, dbo.fn_CA_CalculateGrade(#TempMain.CA_QualTypeID, EstPoints_AcYr, #TempMain.Cohort), GradeBoundaryInflation) 
	) AS EstGradeInflated_AcYr,
	
	--/*NEW*/ NULL AS VAScore_vs_AcYr2dp,
	CAST(((ActPoints_L3VAStu - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS decimal(19,2)) AS VAScore_vs_AcYr2dp,
	((ActPoints_L3VAStu - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS VAScore_vs_AcYr,
	
	/*NEW*/ CAST(((EnrolmentPoints - EstPoints_AcYr) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))	AS EnrolmentGradeVAScore_vs_AcYr2dp,
	/*NEW*/ (EnrolmentPoints - EstPoints_AcYr) / Size / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS EnrolmentGradeVAScore_vs_AcYr,
	#TempMain.AcademicYearID AS StudentAcYrID,
	--CASE (SELECT ID FROM CA_LearningAimAcYr_Scope Scope WHERE #TempMain.LearningAimRef = Scope.LearningAimRef AND #TempMain.AcademicYearID = Scope.AcademicYearID) WHEN NULL THEN 'No' ELSE 'Yes' END AS InScope,
	CASE (SELECT VAScope FROM Enrolment WHERE Enrolment.ID = #TempMain.EnrolmentID) WHEN 'CATL' THEN 'Yes' WHEN 'CATC' THEN 'Yes' ELSE 'No' END AS InScope,
	CASE #TempMain.IsGraded WHEN 1 THEN 'Yes' ELSE 'No' END AS IsGraded,
	#TempMain.EnrolmentID,
	CASE WHEN #TempMain.LearningAimRef = #Tempmain.CA_LearningAimRef THEN 'No' ELSE 'Yes' END AS CollegeMapped,
		
	CAST(#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints AS DECIMAL(19,2)) AS MostRecentCollegeEstPoints2dp,
	#TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints,
	CAST((((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS VAScore_vs_MostRecent2dp,
	(((ActPoints_L3VAStu - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS VAScore_vs_MostRecent,
	CAST((((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS EnrolmentGradeVAScore_vs_MostRecent2dp,
	(((EnrolmentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS EnrolmentGradeVAScore_vs_MostRecent,
	
	CAST((((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point1_vs_MostRecent2dp,
	(((Point1_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point1_vs_MostRecent,
	CAST((((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point2_vs_MostRecent2dp,
	(((Point2_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point2_vs_MostRecent,
	CAST((((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point3_vs_MostRecent2dp,
	(((Point3_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point3_vs_MostRecent,
	CAST((((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS DECIMAL(19,2)) AS Point4_vs_MostRecent2dp,
	(((Point4_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)) AS Point4_vs_MostRecent,

		--Most recent InYear Grade fields
	#TempMostRecentInYearPointsGrades.IYMostRecentGrade,
	#TempMostRecentInYearPointsGrades.IYMostRecentPoints,
	
	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2))
					ELSE  CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig2dp,

	CASE Duration	WHEN 1 THEN CAST((((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size) AS DECIMAL(19,2))
					ELSE CASE WHEN (#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) IS NULL --It is 2 or more years
						THEN (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin2) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size)
						ELSE (((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - EstPoints_AcYrMin3) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) ) / Size) --It is 2 or more years
						END --NEW
	END AS IYMostRecent_vs_Orig,

	CASE Duration	WHEN 1 THEN CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2))
					ELSE CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)  AS DECIMAL(19,2)) --It is 2 or more years
	END AS IYMostRecent_vs_Adj2dp,

	CASE Duration	WHEN 1 THEN ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN EstPoints_AcYrMin2 ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END)
					ELSE ((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - CASE WHEN EstPoints_AcYrMin1 IS NULL THEN (CASE WHEN EstPoints_AcYrMin2 IS NULL THEN EstPoints_AcYrMin3 ELSE EstPoints_AcYrMin2 END) ELSE EstPoints_AcYrMin1 END) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) --It is 2 or more years
	END AS IYMostRecent_vs_Adj,

	CAST(((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS IYMostRecent_vs_RecentTarget2dp,
	((#TempMostRecentInYearPointsGrades.IYMostRecentPoints - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS IYMostRecent_vs_RecentTarget,
	IYMostRecentPoint, --the most recent IY Point (e.g. Pt.1, Pt.2)
	#TempMain.MappingInfo,
	#TempMain.CA_QualTypeID,
	(SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = #TempMain.CA_QualTypeID) AS CA_QualTypeDescription,
		#TempMain.TeachingGroupCode,
	StudentUserDefinedString5,
	StudentUserDefinedString6,
	StudentUserDefinedString7,
	StudentUserDefinedString8,
	StudentUserDefinedNumber2,
	EnrolmentUserDefinedString5,
	EnrolmentUserDefinedString6,
	EnrolmentUserDefinedString7,
	EnrolmentUserDefinedString8,
	EnrolmentUserDefinedNumber2,
	CourseUserDefinedString1,
	CourseUserDefinedString2,
	CourseUserDefinedString3,
	CourseUserDefinedString4,
	Point5_Grade,
	Point6_Grade,
	Point7_Grade,
	Point8_Grade,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	CAST(((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point5_vs_MostRecent2dp,
	((Point5_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point5_vs_MostRecent,
	CAST(((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point6_vs_MostRecent2dp,
	((Point6_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point6_vs_MostRecent,
	CAST(((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point7_vs_MostRecent2dp,
	((Point7_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point7_vs_MostRecent,
	CAST(((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints)  / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point8_vs_MostRecent2dp,
	((Point8_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point8_vs_MostRecent,
	(SELECT LearningAim.NotionalNVQLevel FROM LearningAim WHERE LearningAim.LearningAimRef = #TempMain.LearningAimRef) AS NVQLevel,
	#TempMain.Point1_Notes, 
	#TempMain.Point2_Notes, 
	#TempMain.Point3_Notes, 
	#TempMain.Point4_Notes, 
	#TempMain.Point5_Notes, 
	#TempMain.Point6_Notes, 
	#TempMain.Point7_Notes, 
	#TempMain.Point8_Notes,
	NULL AS OfqualGradingScheme,
	MostRecentNationalDataYear,
	#TempMain.PersonalTargetGrade,
	#TempMain.OutcomeID,
	#TempMain.OutcomeDescription,
	#TempMain.TeachingGroupTitle,
	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) AS IYMostRecentGradeNo, --v1.28
	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) AS MostRecentCollegeEstGradeNo, --v1.28
	
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) > (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentBelowTarget,
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) < (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentAboveTarget,
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentInYearPointsGrades.IYMostRecentPoints , #TempMain.[CA_Type])) = (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS MostRecentAtTarget,

	#TempMain.Point1_EffortDescription,
	#TempMain.Point2_EffortDescription,
	#TempMain.Point3_EffortDescription,
	#TempMain.Point4_EffortDescription,
	#TempMain.Point5_EffortDescription,
	#TempMain.Point6_EffortDescription,
	#TempMain.Point7_EffortDescription,
	#TempMain.Point8_EffortDescription,
	(SELECT AcademicYearID FROM #TempEnrolmentFrozenTargets WHERE #TempEnrolmentFrozenTargets.ID = #TempMain.ID) AS TargetFrozenAcademicYearID,
	Point9_Grade,
	Point10_Grade,
	Point11_Grade,
	Point12_Grade,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	CAST(((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point9_vs_MostRecent2dp,
	((Point9_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point9_vs_MostRecent,
	CAST(((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point10_vs_MostRecent2dp,
	((Point10_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point10_vs_MostRecent,
	CAST(((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) /Size ) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point11_vs_MostRecent2dp,
	((Point11_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point11_vs_MostRecent,
	CAST(((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / Size) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) AS DECIMAL(19,2)) AS Point12_vs_MostRecent2dp,
	((Point12_Points - #TempMostRecentCollegeEstPoints.MostRecentCollegeEstPoints) / (CASE WHEN #TempMain.Cohort IN('Tech Cert', 'L2 CA', 'L2 Other') THEN 1 ELSE 10 END) / Size ) AS Point12_vs_MostRecent,
	#TempMain.Point9_Notes, 
	#TempMain.Point10_Notes, 
	#TempMain.Point11_Notes, 
	#TempMain.Point12_Notes,
	#TempMain.Point9_EffortDescription,
	#TempMain.Point10_EffortDescription,
	#TempMain.Point11_EffortDescription,
	#TempMain.Point12_EffortDescription,
	NULL AS IYMostRecent_vs_RecentTarget_NationalBanding,
	NULL AS EnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	(SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints, #TempMain.[CA_Type])) AS EnrolmentGradeNo, --v1.34
	
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) < (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeBelowTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) > (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeAboveTarget, --v1.34
	CASE WHEN (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, MostRecentCollegeEstPoints , #TempMain.[CA_Type])) = (SELECT dbo.fn_CA_CalculateGradeNo(#TempMain.CA_QualTypeID, EnrolmentPoints , #TempMain.[CA_Type])) THEN 1 ELSE 0 END AS EnrolmentGradeAtTarget,  --v1.34

	(SELECT Count(vStudentEntryLearningAim.EntryLearningAimRef) 
	FROM vStudentEntryLearningAim 
	INNER JOIN EntryLearningAim ON vStudentEntryLearningAim.EntryLearningAimRef = EntryLearningAim.EntryLearningAimRef
	INNER JOIN EntryLearningAimType ON EntryLearningAim.EntryLearningAimTypeID = EntryLearningAimType.ID
	INNER JOIN EntryLearningAimTypeGrade ON EntryLearningAimType.ID = EntryLearningAimTypeGrade.EntryLearningAimTypeID
	WHERE vStudentEntryLearningAim.Grade = LTRIM(RTRIM(EntryLearningAimTypeGrade.Grade))
	AND EntryLearningAimType.IsObsolete = 0
	AND vStudentEntryLearningAim.StudentID = #TempMain.StudentID
	) AS CountOfMappedQOE--v1.36

	, (SELECT #Temp_Enrol_CollegeStructure.CollegeStructure FROM #Temp_Enrol_CollegeStructure WHERE #Temp_Enrol_CollegeStructure.ID = #TempMain.ID) AS CollegeStructure --v1.36

FROM
	#TempMain
	LEFT JOIN #TempMostRecentCollegeEstPoints
	ON #TempMain.ID = #TempMostRecentCollegeEstPoints.ID
	LEFT JOIN #TempMostRecentInYearPointsGrades
	ON #TempMain.ID = #TempMostRecentInYearPointsGrades.ID


GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion]    Script Date: 02/05/2024 11:07:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion] AS' 
END
GO

--exec [sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion] '23/24', 4, 1

ALTER PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_CrossCollege_ByStudent_ByQuestion]
  @AcademicYearID   AS VARCHAR(5),
  @QuestionID AS INT,
  @ShowStudentsWithAnswers AS INT
AS
--AMG 25/03/2024
--Only shows one row per student.
--Pass in a Question Parameter and see how it has been answered by each student in each period.
--AMG 17/04/2024
--Added in parameter @ShowStudentsWithAnswers (0=All, 1=Answered, 2=NotAnswered)
--AMG 29/04/2024
--Added in StartingPeriodValue and MostRecentPeriodValue
--AMG 30/04/2024
--Added in AS StudentUserDefinedNumber, Number2, Date

--DECLARE @AcademicYearID   AS VARCHAR(5)
--SELECT @AcademicYearID = '23/24'
----Now, (for Student Cross College) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)

AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)

AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsStudentOnlyAnswerAvg_ByQuestion_Latestsub
FROM vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot
WHERE AcademicYearID = @AcademicYearID
AND SkillsQuestionID = @QuestionID




--and (for Student Cross-College) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	MostRecentPeriodValue,
	StartingPeriodValue,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsStudentAvgByQuestion_Latest
FROM
	#TempvSkillsStudentOnlyAnswerAvg_ByQuestion_Latestsub




--For the Overall Student Enrolment Status (Cross College),
		
--The Enrolment OverallCompletionID should only be based on 'Imported' records.
--Firstly Load up a series of #Temptables with a count of the completion statuses ...
--It is important that we only take the 'Imported' records - we don't want to look at adhoc records here!
SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp1 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 1 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp2 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 2 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp3 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 3 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp4 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 4 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp5 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 5 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp6 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 6 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID



SELECT 
	OGP_Student.ID AS OGP_StudentID,
	(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
		(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
			(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
				(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
					(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
					99 --Other!
					END) -- Xfer
				END)
			END)
		END)
	END) AS StudentOverallCompletionID

INTO
	#TempOverallStudentCompletion
FROM
	OGP_Student
		INNER JOIN
		(
		SELECT 
			OGP_Student.ID,
			(SELECT CountCompletion FROM #TempStudent_Comp1 WHERE #TempStudent_Comp1.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempStudent_Comp2 WHERE #TempStudent_Comp2.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempStudent_Comp3 WHERE #TempStudent_Comp3.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempStudent_Comp4 WHERE #TempStudent_Comp4.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempStudent_Comp5 WHERE #TempStudent_Comp5.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempStudent_Comp6 WHERE #TempStudent_Comp6.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_6
		FROM
			OGP_Student	
		WHERE
			OGP_Student.AcademicYearID = @AcademicYearID
			AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

		ON t.ID = OGP_Student.ID
		 

	


SELECT
	(SELECT [Description] FROM SkillsQuestion WHERE ID = @QuestionID) AS SkillsQuestionDescription,
	OGP_Student.AcademicYearID, StudentRef, Forenames, Surname, 

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = OGP_Student.AcademicYearID ) + '0831' AS DateTime),
	OGP_Student.DOB
	)) AS AgeOn31Aug,
	Gender, 
	(SELECT Ethnicity.Code + ' - ' + Ethnicity.[Definition] FROM Ethnicity WHERE Ethnicity.ID = OGP_Student.EthnicityID) AS Ethnicity, 
	DOB, 

	#TempOverallStudentCompletion.StudentOverallCompletionID, 
	ISNULL((SELECT [Description]FROM Completion WHERE Completion.ID = #TempOverallStudentCompletion.StudentOverallCompletionID), 'n/a') AS CompletionStatus, 
	UserDefinedString1 AS StudentUserDefinedString1, UserDefinedString2 AS StudentUserDefinedString2, UserDefinedString3 AS StudentUserDefinedString3, UserDefinedString4 AS StudentUserDefinedString4,
	UserDefinedString5 AS StudentUserDefinedString5, UserDefinedString6 AS StudentUserDefinedString6, UserDefinedString7 AS StudentUserDefinedString7, UserDefinedString8 AS StudentUserDefinedString8,
	UserDefinedNumber AS StudentUserDefinedNumber, UserDefinedNumber2 AS StudentUserDefinedNumber2, UserDefinedDate AS StudentUserDefinedDate, 
	(SELECT LLDDandHealthProblem.Code + ' - ' + LLDDandHealthProblem.[Definition] FROM LLDDandHealthProblem WHERE LLDDandHealthProblem.ID = OGP_Student.LLDDandHealthProblemID) AS LLDDandHealthProblem, 
	OGP_Student.FreeSchoolMeal,
	
	OGP_Student.ID AS OGP_StudentID,

	 vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period01 AS CrossCollPeriod01,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period02 AS CrossCollPeriod02,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period03 AS CrossCollPeriod03, vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period04 AS CrossCollPeriod04,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period05 AS CrossCollPeriod05,  
	 vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period06 AS CrossCollPeriod06,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period07 AS CrossCollPeriod07,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period08 AS CrossCollPeriod08, vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period09 AS CrossCollPeriod09,  vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.Period10 AS CrossCollPeriod10,
	#TempvSkillsStudentAvgByQuestion_Latest.Diff_Start_Latest AS CrossCollDifference,
	#TempvSkillsStudentAvgByQuestion_Latest.StartingPeriod AS CrossCollStartingPeriod,
	#TempvSkillsStudentAvgByQuestion_Latest.MostRecentPeriod AS CrossCollMostRecentPeriod,
	#TempvSkillsStudentAvgByQuestion_Latest.MostRecentPeriodValue AS CrossCollMostRecentPeriodValue,
	#TempvSkillsStudentAvgByQuestion_Latest.StartingPeriodValue AS CrossCollStartingPeriodValue

FROM 
	OGP_Student 
	LEFT JOIN #TempvSkillsStudentAvgByQuestion_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvgByQuestion_Latest.OGP_StudentID
	LEFT JOIN vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.OGP_StudentID AND vSkillsStudentOnlyAnswer_ByQuestion_AvgPivot.SkillsQuestionID = @QuestionID
	LEFT JOIN #TempOverallStudentCompletion ON OGP_Student.ID = #TempOverallStudentCompletion.OGP_StudentID

WHERE
	OGP_Student.AcademicYearID = @AcademicYearID
	AND OGP_Student.RecordStatus <> 'Obsolete'
	AND (CASE WHEN @ShowStudentsWithAnswers = 2 THEN 2 ELSE (CASE WHEN #TempvSkillsStudentAvgByQuestion_Latest.StartingPeriod IS NULL THEN 0 ELSE 1 END) END) = @ShowStudentsWithAnswers
	


GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Skills_Reporting_ByStudent]    Script Date: 02/05/2024 11:07:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Skills_Reporting_ByStudent]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByStudent] AS' 
END
GO

--exec [sp_WebPlus_Skills_Reporting_ByStudent] '23/24', 2

ALTER PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByStudent]
  @AcademicYearID   AS VARCHAR(5),
  @ShowStudentsWithAnswers AS INT
AS
--AMG 13/02/2024
--The DataSource for the main reporting page in OneGradePlus for Skills
--We need to calculate the starting point and the MostRecentPoint
--So if a student starts in period 3, that is their starting point - we can then calculate the difference between the start and end point.
--Shows the Course Answers for the Course and the Overall Student Answers.
--AMG 25/03/2024
--This now only shows one row per student.
--It shows the CrossCollege Avg, the Avg for ALL Courses and the Overall Avg for each period, the Start and End and Difference also.
--AMG 06/04/2024
--Removed unnecessary course / enrolment related NULL fields.
--AMG 17/04/2024
--Added in parameter @ShowStudentsWithAnswers (0=All, 1=Answered, 2=NotAnswered) and fixed a join to remove duplicated records
--AMG 19/04/2024
--renamed Ethnicity field to LLDDandHealthProblem.
--AMG 30/04/2024
--Added in AS StudentUserDefinedNumber, Number2, Date

--DECLARE @AcademicYearID   AS VARCHAR(5)
--SELECT @AcademicYearID = '23/24'
----Now, (for Student Cross College) we need to find the Most Recent Period and the StartingValue and the Latest Value.

SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)

AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)

AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsStudentOnlyAnswerAvg_Latestsub
FROM vSkillsStudentOnlyAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--Now, (for ALL Courses) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
AcademicYearID,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE  Period10 END)
									ELSE  Period09 END)
								ELSE  Period08 END)
							ELSE  Period07 END) 
						ELSE  Period06 END)
					ELSE  Period05 END)
				ELSE  Period04 END)
			ELSE  Period03 END)
		ELSE  Period02 END)				
	ELSE  Period01 END)
 AS StartingValue,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN 
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod, 
 
  	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
 					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 10 END)
AS MostRecentPeriod
INTO #TempvSkillsCourseStudentOnlyAnswerAvg_AllCourses_Latestsub
FROM vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot
WHERE AcademicYearID = @AcademicYearID

--Now, (for Overall) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)
AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsOverallStudentAnswerAvg_Latestsub
FROM vSkillsOverallStudentAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--and (for Student Cross-College) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsStudentAvg_Latest
FROM
	#TempvSkillsStudentOnlyAnswerAvg_Latestsub

--and (for ALL Courses) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	AcademicYearID,
	StartingPeriod,
	MostRecentPeriod,
	(CASE WHEN StartingValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsAllCoursesAvg_Latest
FROM
	#TempvSkillsCourseStudentOnlyAnswerAvg_AllCourses_Latestsub

--and (for Overall) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsOverallAvg_Latest
FROM
	#TempvSkillsOverallStudentAnswerAvg_Latestsub


--For the Overall Student Enrolment Status (Cross College),
		
--The Enrolment OverallCompletionID should only be based on 'Imported' records.
--Firstly Load up a series of #Temptables with a count of the completion statuses ...
--It is important that we only take the 'Imported' records - we don't want to look at adhoc records here!
SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp1 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 1 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp2 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 2 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp3 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 3 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp4 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 4 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp5 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 5 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp6 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 6 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID



SELECT 
	OGP_Student.ID AS OGP_StudentID,
	(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
		(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
			(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
				(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
					(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
					99 --Other!
					END) -- Xfer
				END)
			END)
		END)
	END) AS StudentOverallCompletionID

INTO
	#TempOverallStudentCompletion
FROM
	OGP_Student
		INNER JOIN
		(
		SELECT 
			OGP_Student.ID,
			(SELECT CountCompletion FROM #TempStudent_Comp1 WHERE #TempStudent_Comp1.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempStudent_Comp2 WHERE #TempStudent_Comp2.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempStudent_Comp3 WHERE #TempStudent_Comp3.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempStudent_Comp4 WHERE #TempStudent_Comp4.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempStudent_Comp5 WHERE #TempStudent_Comp5.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempStudent_Comp6 WHERE #TempStudent_Comp6.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_6
		FROM
			OGP_Student	
		WHERE
			OGP_Student.AcademicYearID = @AcademicYearID
			AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

		ON t.ID = OGP_Student.ID
		 

	


SELECT

	OGP_Student.AcademicYearID, StudentRef, Forenames, Surname, 

	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = OGP_Student.AcademicYearID ) + '0831' AS DateTime),
	OGP_Student.DOB
	)) AS AgeOn31Aug,
	Gender, 
	(SELECT Ethnicity.Code + ' - ' + Ethnicity.[Definition] FROM Ethnicity WHERE Ethnicity.ID = OGP_Student.EthnicityID) AS Ethnicity, 
	DOB, 

	#TempOverallStudentCompletion.StudentOverallCompletionID, 
	ISNULL((SELECT [Description] FROM Completion WHERE Completion.ID = #TempOverallStudentCompletion.StudentOverallCompletionID), 'n/a') AS CompletionStatus, 

	UserDefinedString1 AS StudentUserDefinedString1, UserDefinedString2 AS StudentUserDefinedString2, UserDefinedString3 AS StudentUserDefinedString3, UserDefinedString4 AS StudentUserDefinedString4,
	UserDefinedString5 AS StudentUserDefinedString5, UserDefinedString6 AS StudentUserDefinedString6, UserDefinedString7 AS StudentUserDefinedString7, UserDefinedString8 AS StudentUserDefinedString8,
	UserDefinedNumber AS StudentUserDefinedNumber, UserDefinedNumber2 AS StudentUserDefinedNumber2, UserDefinedDate AS StudentUserDefinedDate, 

	(SELECT LLDDandHealthProblem.Code + ' - ' + LLDDandHealthProblem.[Definition] FROM LLDDandHealthProblem WHERE LLDDandHealthProblem.ID = OGP_Student.LLDDandHealthProblemID) AS LLDDandHealthProblem, 
	OGP_Student.FreeSchoolMeal,
	
	OGP_Student.ID AS OGP_StudentID,

	 vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS CrossCollPeriod01,  vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS CrossCollPeriod02,  vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS CrossCollPeriod03, vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS CrossCollPeriod04,  vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS CrossCollPeriod05,  
	 vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS CrossCollPeriod06,  vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS CrossCollPeriod07,  vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS CrossCollPeriod08, vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS CrossCollPeriod09,  vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS CrossCollPeriod10,
	#TempvSkillsStudentAvg_Latest.Diff_Start_Latest AS CrossCollDifference,
	#TempvSkillsStudentAvg_Latest.StartingPeriod AS CrossCollStartingPeriod,
	#TempvSkillsStudentAvg_Latest.MostRecentPeriod AS CrossCollMostRecentPeriod,
	
	vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period01 AS AllCoursesPeriod01,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period02 AS AllCoursesPeriod02,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period03 AS AllCoursesPeriod03, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period04 AS AllCoursesPeriod04, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period05 AS AllCoursesPeriod05,  
	vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period06 AS AllCoursesPeriod06,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period07 AS AllCoursesPeriod07,  vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period08 AS AllCoursesPeriod08, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period09 AS AllCoursesPeriod09, vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.Period10 AS AllCoursesPeriod10,
	#TempvSkillsAllCoursesAvg_Latest.Diff_Start_Latest AS AllCoursesDifference, 
	#TempvSkillsAllCoursesAvg_Latest.StartingPeriod AS AllCoursesStartingPeriod,
	#TempvSkillsAllCoursesAvg_Latest.MostRecentPeriod AS AllCoursesMostRecentPeriod,

	 vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallPeriod01,  vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallPeriod02,  vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallPeriod03, vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallPeriod04, vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallPeriod05,  
	 vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallPeriod06,  vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallPeriod07,  vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallPeriod08, vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallPeriod09, vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallPeriod10,
	#TempvSkillsOverallAvg_Latest.Diff_Start_Latest AS OverallDifference, 
	#TempvSkillsOverallAvg_Latest.StartingPeriod AS OverallStartingPeriod,
	#TempvSkillsOverallAvg_Latest.MostRecentPeriod AS OverallMostRecentPeriod

FROM 
	OGP_Student 
	LEFT JOIN #TempvSkillsStudentAvg_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsOverallAvg_Latest ON OGP_Student.ID =  #TempvSkillsOverallAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsAllCoursesAvg_Latest ON OGP_Student.ID =  #TempvSkillsAllCoursesAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot ON OGP_Student.ID = vSkillsCourseStudentOnlyAnswer_AllCourses_AvgPivot.OGP_StudentID

	LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID
	LEFT JOIN #TempOverallStudentCompletion ON OGP_Student.ID = #TempOverallStudentCompletion.OGP_StudentID

WHERE
	OGP_Student.AcademicYearID = @AcademicYearID
	AND OGP_Student.RecordStatus <> 'Obsolete'
	AND (CASE WHEN @ShowStudentsWithAnswers = 2 THEN 2 ELSE (CASE WHEN #TempvSkillsOverallAvg_Latest.StartingPeriod IS NULL THEN 0 ELSE 1 END) END) = @ShowStudentsWithAnswers



GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Delta_Update_Skills]    Script Date: 02/05/2024 11:07:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Delta_Update_Skills]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Delta_Update_Skills] AS' 
END
GO


ALTER PROCEDURE [dbo].[sp_WebPlus_Delta_Update_Skills] 
@OGP_StudentID INT 
AS

--AMG 09/01/2024
--If there is a DL Licence and Progress is Internal, we need to update the Delta Score based on the Progress just entered
--(if the Progress Delta Category is Active)
--This works for when EnrolmentWebSave is used and EngMatEnrolmentWebSave
--It will only work for the Current Academic Year and the progress is updated for the current week - we can't do historic Ac Years
--Firstly, we need to populate Delta_Student_Stat, then fill in the gaps, then fill in Delta_Student_Score
--Secondly, populate the DELTA_Enrolment_Information for the Progress Delta Category.
-- AMG 16/01/2024
-- It may be that no data has been imported for a few weeks and Progress gets updated.  We therefore need to update all delta categories (for the student) in the Stat table.
-- There will also be gaps in the Score table, so fill these in too.
-- AMG 26/04/2024
-- Added corrections to bring into line with corrections made to [sp_WebPlus_Delta_Update_Progress]

SELECT WeekNum, AcademicYearID INTO #Prog_TempWeekNo FROM tfn_GetAcYrWeekNumfromDate(getdate())
--DECLARE @UserName AS VARCHAR(255)
--SELECT @UserName = 'agenner'

DECLARE @WeekNum INT
DECLARE @AcademicYearID VARCHAR(5) 
SELECT @WeekNum = #Prog_TempWeekNo.WeekNum FROM #Prog_TempWeekNo
SELECT @AcademicYearID = #Prog_TempWeekNo.AcademicYearID FROM #Prog_TempWeekNo

SELECT DISTINCT AcademicYearID, StudentRef, @OGP_StudentID AS OGP_StudentID 
INTO #Prog_TempStudent
FROM OGP_Student
WHERE OGP_Student.ID = @OGP_StudentID

--select * from Delta_Student_Score WHERE AcademicYearID = '23/24'
--select * from EnrolmentWebSave
--insert EnrolmentWebSave(EnrolmentID, UserName)
--Select 191322, 'agenner'

--If the MinAcYear in EnrolmentWebSave is not the same as the current AcYr in #Prog_TempWeekNo, we can't go any further.  We must be in the current AcYr.
IF (SELECT MIN(AcademicYearID) FROM OGP_Student WHERE ID = @OGP_StudentID) = @AcademicYearID AND (SELECT COUNT(*) FROM SystemLicenceKey WHERE ProductCode = 'DL') = 1 AND (SELECT COUNT(*) FROM Delta_Category WHERE ID = 12 AND IsExternalDataSource = 0 AND IsActive = 1) = 1
BEGIN


				--What is the latest value that has been saved?
				DECLARE @DELTACategoryID INT
				SELECT @DELTACategoryID = 12--(SELECT ID FROM DELTA_Category WHERE OneGradeImportCategory = 'Skills')

---------------------------------
--1. START WITH STUDENT VALUE----
---------------------------------


SELECT 
	AcademicYearID,
	OGP_StudentID,
	StudentRef,
	[Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10]
INTO #TempvSkillsStudentAvg
FROM  
	(SELECT OGP_Student.AcademicYearID, OGP_StudentID, StudentRef, SkillsPeriodDescription, AvgAnswerValue FROM vSkillsOverallStudentAnswer 
	INNER JOIN OGP_Student ON vSkillsOverallStudentAnswer.OGP_StudentID = OGP_Student.ID
	WHERE OGP_Student.ID = @OGP_StudentID) AS sourcetable
	PIVOT  
	(  
	  MAX(AvgAnswerValue)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR SkillsPeriodDescription IN ([Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10])
	) AS PivotTable


		--If a student has multiple records on the same Completion, we need to average out the progress
		SELECT 
			AcademicYearID,
			OGP_StudentID,
			StudentRef,
			(CASE WHEN #TempvSkillsStudentAvg.Period10 IS NULL THEN
				(CASE WHEN #TempvSkillsStudentAvg.Period09 IS NULL THEN
					(CASE WHEN #TempvSkillsStudentAvg.Period08 IS NULL THEN
						(CASE WHEN #TempvSkillsStudentAvg.Period07 IS NULL THEN
							(CASE WHEN #TempvSkillsStudentAvg.Period06 IS NULL THEN
								(CASE WHEN #TempvSkillsStudentAvg.Period05 IS NULL THEN
									(CASE WHEN #TempvSkillsStudentAvg.Period04 IS NULL THEN
										(CASE WHEN #TempvSkillsStudentAvg.Period03 IS NULL THEN
											(CASE WHEN #TempvSkillsStudentAvg.Period02 IS NULL THEN
												(CASE WHEN #TempvSkillsStudentAvg.Period01 IS NULL THEN
												NULL
												ELSE #TempvSkillsStudentAvg.Period01 END)
											ELSE #TempvSkillsStudentAvg.Period02 END)
										ELSE #TempvSkillsStudentAvg.Period03 END)
									ELSE #TempvSkillsStudentAvg.Period04 END) 
								ELSE #TempvSkillsStudentAvg.Period05 END)
							ELSE #TempvSkillsStudentAvg.Period06 END)
						ELSE #TempvSkillsStudentAvg.Period07 END)
					ELSE #TempvSkillsStudentAvg.Period08 END)
				ELSE #TempvSkillsStudentAvg.Period09 END)
			ELSE #TempvSkillsStudentAvg.Period10 END)
			AS MostRecentPeriodValue
		INTO 
			#TempvSkillsStudentAvg_Latest
		FROM
			#TempvSkillsStudentAvg


		--Now put it all together...
		SELECT 
			t.AcademicYearID,
			@WeekNum AS WeekNumber,
			t.StudentRef,
			OGP_Student.ID AS OGP_StudentID,
			@DELTACategoryID AS DeltaCategoryID,
			MostRecentPeriodValue AS [Value],
			GetDate() AS Value_Date,
			GetDate() AS Imported_Date
		INTO 
			#Skills_Delta_Student_Value
		FROM
			#TempvSkillsStudentAvg_Latest t
			INNER JOIN OGP_Student
				ON t.AcademicYearID = OGP_Student.AcademicYearID
				AND t.StudentRef = OGP_Student.StudentRef
		WHERE 
			MostRecentPeriodValue IS NOT NULL

					
---------------------------------
-------------DELTA STAT----------
---------------------------------
	
				--Next, we need to update the Delta_Student_Stat and Delta_Student_Score tables.

				--INSERT WHERE NOT EXISTS the Students and Delta Categories

				INSERT INTO [Delta_Student_Stat] ([AcademicYearID], [OGP_StudentID], [StudentRef], [DeltaCategoryID])
    
				SELECT
					AcademicYearID,
					OGP_StudentID,
					StudentRef,
					DeltaCategoryID
				FROM
					(
						SELECT DISTINCT
							DSV.AcademicYearID, OGP_StudentID, StudentRef, DSV.DeltaCategoryID
						FROM
							#Skills_Delta_Student_Value DSV 
								INNER JOIN Delta_Category_Banding DCB 
								ON DCB.DeltaCategoryID = DSV.DeltaCategoryID
						WHERE DSV.DeltaCategoryID = @DELTACategoryID AND DSV.AcademicYearID = @AcademicYearID 
					  ) d

				WHERE 
					NOT EXISTS (SELECT ID FROM Delta_Student_Stat DSS 
								WHERE DSS.AcademicYearID = d.AcademicYearID
								AND DSS.OGP_StudentID = d.OGP_StudentID 
								AND DSS.DeltaCategoryID = d.DeltaCategoryID)


				DECLARE @SQL varchar(max)
				-- initialise the variable
				SELECT @SQL = ''

				SELECT @SQL = '	UPDATE [Delta_Student_Stat] 
								SET Wk' + CAST(@WeekNum AS VARCHAR) + '_Score = d.score, Wk' + CAST(@WeekNum AS VARCHAR) + '_Value = d.value' + ', 
									Latest_Data_Week = (CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= d.WeekNumber THEN d.WeekNumber ELSE DSS.Latest_Data_Week END),
									Latest_Data_Date = (CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= d.WeekNumber THEN d.Value_Date ELSE DSS.Latest_Data_Date END),
									Latest_Data_Value = (CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= d.WeekNumber THEN d.value ELSE DSS.Latest_Data_Value END),
									Latest_Data_Score = (CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= d.WeekNumber THEN d.score ELSE DSS.Latest_Data_Score END)
								FROM
								(
									SELECT AcademicYearID, OGP_StudentID, StudentRef, DeltaCategoryID,
										   WeekNumber, [Value], [Min], [Max], Score, Value_Date
									FROM 
										(
										SELECT 
											  DSV.AcademicYearID, OGP_StudentID, StudentRef, DSV.DeltaCategoryID,
											  DSV.WeekNumber, DSV.[Value], DCB.[Min], DCB.[Max], DCB.Score, DSV.Value_Date,
											  ROW_NUMBER() OVER(PARTITION BY DSV.AcademicYearID, OGP_StudentID, StudentRef, DSV.DeltaCategoryID, DSV.Weeknumber ORDER BY DCB.Score DESC) AS rownum
										FROM
											  #Skills_Delta_Student_Value DSV
												INNER JOIN Delta_Category_Banding DCB 
												ON DCB.DeltaCategoryID = DSV.DeltaCategoryID
										WHERE 
										  DSV.WeekNumber = ' + CAST(@WeekNum AS VARCHAR) + '
										  --AND DSV.DeltaCategoryID = ' + CAST(@DELTACategoryID AS VARCHAR) + '
										  AND DSV.Value BETWEEN DCB.Min AND DCB.Max
										  AND DSV.AcademicYearID = ''' + @AcademicYearID + '''
										) t
									WHERE t.rownum = 1
								) d
								INNER JOIN
									Delta_Student_Stat DSS ON 
									DSS.OGP_StudentID = d.OGP_StudentID 
									AND DSS.DeltaCategoryID = d.DeltaCategoryID 
									AND DSS.AcademicYearID = d.AcademicYearID
							  '
				--print(@SQL)
				EXEC (@SQL)


--------------------------------------------
----Fill In the Delta_Student_Stat Gaps-----
--------------------------------------------

				DECLARE @MaxCounter INT
				SELECT @MaxCounter = @WeekNum - 1

				DECLARE @strField VARCHAR(5000)	
				SELECT @strField = ''

				SELECT 
					OGP_Student.ID 
				INTO
					#Prog_TempOGP_Student
				FROM
					OGP_Student 
				WHERE
					OGP_Student.ID = @OGP_StudentID


				DECLARE @Counter INT 
				SET @Counter=1

				--Set the Score to be NULL where there is no Value.
				--DECLARE @WeekNum INT
				--SELECT @WeekNum = 13
				--DECLARE @MaxCounter INT
				--SELECT @MaxCounter = @WeekNum - 1
				--DECLARE @Counter INT
				--SET @Counter=1
				--DECLARE @AcademicYearID VARCHAR(5) 
				--SELECT @AcademicYearID = '23/24'
				--DECLARE @DELTACategoryID INT
				--SELECT @DELTACategoryID = 3
				--DECLARE @strField VARCHAR(5000)	
				--SELECT @strField = ''
						WHILE (@Counter <= @MaxCounter)
							BEGIN
								SELECT @strField = 'UPDATE Delta_Student_Stat SET wk' + CONVERT(VARCHAR,@Counter) + '_Score = NULL ' + 
								'FROM Delta_Student_Stat INNER JOIN #Prog_TempOGP_Student ON #Prog_TempOGP_Student.ID = Delta_Student_Stat.OGP_StudentID ' + 
								'WHERE Wk' + CONVERT(VARCHAR,@Counter) + '_Value IS NULL ' +
								' AND ' + CONVERT(VARCHAR,@WeekNum) + ' > ' + CONVERT(VARCHAR,@Counter) + ' AND AcademicYearID = ''' +  CAST(@AcademicYearID AS VARCHAR) + '''' +
								' --AND DeltaCategoryID = ' + CONVERT(VARCHAR,@DeltaCategoryID)
								EXEC (@strField)
								--print (@strField)
								SET @Counter  = @Counter  + 1
							END


				--Cursor loop 1...go forwards filling in the gaps
				SET @Counter=1

						WHILE (@Counter <= @MaxCounter)
							BEGIN
								SELECT @strField = 'UPDATE Delta_Student_Stat SET wk' + CONVERT(VARCHAR,@Counter+1) + '_Score = Wk' + CONVERT(VARCHAR,@Counter) + 
								'_Score FROM Delta_Student_Stat INNER JOIN #Prog_TempOGP_Student ON #Prog_TempOGP_Student.ID = Delta_Student_Stat.OGP_StudentID ' +
								'WHERE Wk' + CONVERT(VARCHAR,@Counter+1) + '_Value IS NULL AND Wk' + CONVERT(VARCHAR,@Counter) +
								'_Score IS NOT NULL AND ' + CONVERT(VARCHAR,@WeekNum) + ' > ' + CONVERT(VARCHAR,@Counter) + ' AND AcademicYearID = ''' +  CAST(@AcademicYearID AS VARCHAR) + '''' +
								' --AND DeltaCategoryID = ' + CONVERT(VARCHAR,@DeltaCategoryID)
								EXEC (@strField)
								--print (@strField)
								SET @Counter  = @Counter  + 1
							END

							
				--Cursor loop 2...go backwards filling in the gaps (e.g. for late starters)
				--we need to count down now 
				SET @Counter = @MaxCounter

						WHILE (@Counter >= 1)
							BEGIN
								SELECT @strField = 'UPDATE Delta_Student_Stat SET wk' + CONVERT(VARCHAR,@Counter) + '_Score = Wk' + CONVERT(VARCHAR,@Counter+1) + 
								'_Score FROM Delta_Student_Stat INNER JOIN #Prog_TempOGP_Student ON #Prog_TempOGP_Student.ID = Delta_Student_Stat.OGP_StudentID ' + 
								'WHERE Wk' + CONVERT(VARCHAR,@Counter) + '_Value IS NULL AND Wk' + CONVERT(VARCHAR,@Counter) +
								'_Score IS NULL AND Wk' + CONVERT(VARCHAR,@Counter+1) + '_Score IS NOT NULL AND ' + CONVERT(VARCHAR,@WeekNum) + ' > ' + CONVERT(VARCHAR,@Counter) + 
								' AND AcademicYearID = ''' +  CAST(@AcademicYearID AS VARCHAR) + '''' + ' --AND DeltaCategoryID = ' + CONVERT(VARCHAR,@DeltaCategoryID)
								EXEC (@strField)
								--print (@strField)
								SET @Counter = @Counter  - 1
							END


---------------------------------
-------------DELTA SCORE---------
---------------------------------

				--INSERT Delta_Student_Score WHERE NOT EXISTS for the latest AcYr
				INSERT INTO [Delta_Student_Score] ([AcademicYearID], [OGP_StudentID], [StudentRef])
				SELECT DISTINCT 
					Delta_Student_Stat.AcademicYearID,
					Delta_Student_Stat.OGP_StudentID,
					Delta_Student_Stat.StudentRef
				 FROM
					Delta_Student_Stat
						--INNER JOIN Delta_Category  
						--ON Delta_Category.ID = Delta_Student_Stat.DeltaCategoryID
						INNER JOIN #Prog_TempStudent
						ON Delta_Student_Stat.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
						AND Delta_Student_Stat.AcademicYearID = @AcademicYearID
						--AND Delta_Category.IsActive = 1
				WHERE 
					NOT EXISTS (SELECT DISTINCT Delta_Student_Score.ID FROM Delta_Student_Score 
								WHERE Delta_Student_Stat.OGP_StudentID = Delta_Student_Score.OGP_StudentID
								AND Delta_Student_Stat.AcademicYearID = Delta_Student_Score.AcademicYearID)


				-- initialise the variable
				SELECT @SQL = ''

				SELECT @SQL = '	UPDATE Delta_Student_Score 
				SET Latest_Data_Week = CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= ' + CAST(@WeekNum AS VARCHAR) + ' THEN ' + CAST(@WeekNum AS VARCHAR) + ' ELSE DSS.Latest_Data_Week END, 
				Latest_Data_Date = CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= ' + CAST(@WeekNum AS VARCHAR) + ' THEN d.Latest_Data_Date ELSE DSS.Latest_Data_Date END, 
				Latest_Data_Score = CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= ' + CAST(@WeekNum AS VARCHAR) + ' THEN d.Latest_Data_Weighted_Score ELSE DSS.Latest_Data_Score END
				FROM
					(
					SELECT DISTINCT 
						DSS.[AcademicYearID],
						DSS.[OGP_StudentID],
						CASE SUM(DC.Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(DSS.Latest_Data_Score * DC.Weighting) / SUM(DC.Weighting),0) AS INT) END Latest_Data_Weighted_Score,
						MAX(DSS.Latest_Data_Date) AS Latest_Data_Date
					FROM 
						[Delta_Student_Stat] DSS
						INNER JOIN Delta_Category DC 
							ON DC.ID = DSS.DeltaCategoryID
							INNER JOIN #Prog_TempStudent
								ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
					WHERE 
						DSS.AcademicYearID = ''' + @AcademicYearID + '''
						AND DC.IsActive = 1
					GROUP BY
						DSS.[AcademicYearID],
						DSS.[OGP_StudentID]
					  ) d
				INNER JOIN Delta_Student_Score DSS 
					ON DSS.OGP_StudentID = d.OGP_StudentID 
					AND DSS.AcademicYearID = d.AcademicYearID'

				EXEC (@SQL)
  
				SELECT @SQL = ''

				--Now do for the StudentScore based upon Delta_Category.ContributeToStudentScore
				SELECT @SQL = '	UPDATE Delta_Student_Score 
				SET Latest_Data_StudentScore = CASE WHEN ISNULL(DSS.Latest_Data_Week,0) <= ' + CAST(@WeekNum AS VARCHAR) + ' THEN d.Latest_Data_Weighted_Score ELSE DSS.Latest_Data_StudentScore END
				FROM
					(
					SELECT DISTINCT 
						DSS.[AcademicYearID],
						DSS.[OGP_StudentID],
						CASE SUM(DC.Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(DSS.Latest_Data_Score * DC.Weighting) / SUM(DC.Weighting),0) AS INT) END Latest_Data_Weighted_Score,
						MAX(DSS.Latest_Data_Date) AS Latest_Data_Date
					FROM 
						[Delta_Student_Stat] DSS
						INNER JOIN Delta_Category DC 
							ON DC.ID = DSS.DeltaCategoryID
							INNER JOIN #Prog_TempStudent
								ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
					WHERE 
						DSS.AcademicYearID = ''' + @AcademicYearID + '''
						AND DC.IsActive = 1
						AND DC.ContributeToStudentScore = 1
					GROUP BY
						DSS.[AcademicYearID],
						DSS.[OGP_StudentID]
					  ) d
				INNER JOIN Delta_Student_Score DSS 
					ON DSS.OGP_StudentID = d.OGP_StudentID 
					AND DSS.AcademicYearID = d.AcademicYearID'

				EXEC (@SQL)

				SELECT @SQL = ''
				--Recalculate the Wkx_Score fields in the Delta_Student_Score table.
				SELECT @SQL = 
				'
					UPDATE Delta_Student_Score 
					SET Wk' + CAST(@WeekNum AS VARCHAR) + '_Score_Overall = d.Weighted_Score
					FROM
						(
						SELECT DISTINCT 
							DSS.AcademicYearID,
							DSS.OGP_StudentID,
							CASE SUM(Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(Wk' + CAST(@WeekNum AS VARCHAR) + '_Score * Weighting) / SUM(Weighting),0) AS INT) END Weighted_Score
						FROM 
							Delta_Student_Stat DSS
							INNER JOIN Delta_Category DC 
								ON DC.ID = DSS.DeltaCategoryID
								INNER JOIN #Prog_TempStudent
									ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
						WHERE 
							DSS.AcademicYearID = ''' + @AcademicYearID + '''
							AND Wk' + CAST(@WeekNum AS VARCHAR) + '_Score IS NOT NULL
							AND DC.IsActive = 1
						GROUP BY
							DSS.AcademicYearID,
							DSS.OGP_StudentID
						) d
					INNER JOIN Delta_Student_Score DSS 
						ON DSS.OGP_StudentID = d.OGP_StudentID 
						AND DSS.AcademicYearID = d.AcademicYearID
				'
				--print(@SQL)
				EXEC (@SQL)

				SELECT @SQL = ''

				SELECT @SQL = 
				'
					UPDATE Delta_Student_Score 
					SET Wk' + CAST(@WeekNum AS VARCHAR) + '_StudentScore_Overall = d.Weighted_Score
					FROM
						(
						SELECT DISTINCT 
							DSS.AcademicYearID,
							DSS.OGP_StudentID,
							CASE SUM(Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(Wk' + CAST(@WeekNum AS VARCHAR) + '_Score * Weighting) / SUM(Weighting),0) AS INT) END Weighted_Score
						FROM 
							Delta_Student_Stat DSS
							INNER JOIN Delta_Category DC 
								ON DC.ID = DSS.DeltaCategoryID
									INNER JOIN #Prog_TempStudent
									ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
						WHERE 
							DSS.AcademicYearID = ''' + @AcademicYearID + '''
							AND Wk' + CAST(@WeekNum AS VARCHAR) + '_Score IS NOT NULL
							AND DC.IsActive = 1
							AND DC.ContributeToStudentScore = 1
						GROUP BY
							DSS.AcademicYearID,
							DSS.OGP_StudentID
						) d
					INNER JOIN Delta_Student_Score DSS 
						ON DSS.OGP_StudentID = d.OGP_StudentID 
						AND DSS.AcademicYearID = d.AcademicYearID
				'
				--print(@SQL)
				EXEC (@SQL)

--If there are any weeks in the Score table that are NULL, we need to calculate the scores...
--Recalculate the Wkx_Score fields in the Delta_Student_Score table.
DECLARE @ID INT
SET @ID = 1
--Loop through from Wk1 to @WeekNum (we are only interested in up to this week)
WHILE (@ID <= @WeekNum)
BEGIN
				SELECT @SQL = 
				'
					UPDATE Delta_Student_Score 
					SET Wk' + CAST(@ID AS VARCHAR) + '_Score_Overall = d.Weighted_Score
					FROM
						(
						SELECT DISTINCT 
							DSS.AcademicYearID,
							DSS.OGP_StudentID,
							CASE SUM(Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(Wk' + CAST(@ID AS VARCHAR) + '_Score * Weighting) / SUM(Weighting),0) AS INT) END AS Weighted_Score
						FROM 
							Delta_Student_Stat DSS
							INNER JOIN Delta_Category DC 
								ON DC.ID = DSS.DeltaCategoryID
								INNER JOIN #Prog_TempStudent
									ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
						WHERE 
							DSS.AcademicYearID = ''' + @AcademicYearID + '''
							AND Wk' + CAST(@ID AS VARCHAR) + '_Score IS NOT NULL
							AND DC.IsActive = 1
						GROUP BY
							DSS.AcademicYearID,
							DSS.OGP_StudentID
						) d
					INNER JOIN Delta_Student_Score DSS 
						ON DSS.OGP_StudentID = d.OGP_StudentID 
						AND DSS.AcademicYearID = d.AcademicYearID
					WHERE Wk' + CAST(@ID AS VARCHAR) + '_Score_Overall IS NULL
				'
				--print(@SQL)
				EXEC (@SQL)
	SET @ID = @ID + 1
END



SET @ID = 1

--Recalculate the Wkx_StudentScore fields in the Delta_Student_Score table.

--Loop through from Wk1 to @WeekNum (we are only interested in up to this week)
WHILE (@ID <= @WeekNum)
BEGIN
				SELECT @SQL = 
				'
					UPDATE Delta_Student_Score 
					SET Wk' + CAST(@ID AS VARCHAR) + '_StudentScore_Overall = d.Weighted_Score
					FROM
						(
						SELECT DISTINCT 
							DSS.AcademicYearID,
							DSS.OGP_StudentID,
							CASE SUM(Weighting) WHEN 0 THEN 0 ELSE CAST(ROUND(SUM(Wk' + CAST(@ID AS VARCHAR) + '_Score * Weighting) / SUM(Weighting),0) AS INT) END AS Weighted_Score
						FROM 
							Delta_Student_Stat DSS
							INNER JOIN Delta_Category DC 
								ON DC.ID = DSS.DeltaCategoryID
								INNER JOIN #Prog_TempStudent
									ON DSS.OGP_StudentID = #Prog_TempStudent.OGP_StudentID
						WHERE 
							DSS.AcademicYearID = ''' + @AcademicYearID + '''
							AND Wk' + CAST(@ID AS VARCHAR) + '_Score IS NOT NULL
							AND DC.IsActive = 1
							AND DC.ContributeToStudentScore = 1
						GROUP BY
							DSS.AcademicYearID,
							DSS.OGP_StudentID
						) d
					INNER JOIN Delta_Student_Score DSS 
						ON DSS.OGP_StudentID = d.OGP_StudentID 
						AND DSS.AcademicYearID = d.AcademicYearID
					WHERE Wk' + CAST(@ID AS VARCHAR) + '_StudentScore_Overall IS NULL
				'
				--print(@SQL)
				EXEC (@SQL)
	SET @ID = @ID + 1
END

---------------------------------
--2. NOW WITH ENROL VALUE--------
---------------------------------


				--Get the Enrolment Answers for the latest period...
SELECT 
	AcademicYearID,
	OGP_StudentID,
	StudentRef,
	CourseID,
	[Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10]
INTO #TempvSkillsCourseAvg
FROM  
	(SELECT OGP_Student.AcademicYearID, OGP_StudentID, StudentRef, CourseID, SkillsPeriodDescription, AvgAnswerValue FROM vSkillsCourseStudentOnlyAnswer 
	INNER JOIN OGP_Student ON vSkillsCourseStudentOnlyAnswer.OGP_StudentID = OGP_Student.ID
	WHERE OGP_Student.AcademicYearID = @AcademicYearID AND OGP_Student.ID = @OGP_StudentID) AS sourcetable
	PIVOT  
	(  
	  MAX(AvgAnswerValue)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR SkillsPeriodDescription IN ([Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10])
	) AS PivotTable


		SELECT 
			AcademicYearID,
			OGP_StudentID,
			StudentRef,
			CourseID, 
			(CASE WHEN #TempvSkillsCourseAvg.Period10 IS NULL THEN
				(CASE WHEN #TempvSkillsCourseAvg.Period09 IS NULL THEN
					(CASE WHEN #TempvSkillsCourseAvg.Period08 IS NULL THEN
						(CASE WHEN #TempvSkillsCourseAvg.Period07 IS NULL THEN
							(CASE WHEN #TempvSkillsCourseAvg.Period06 IS NULL THEN
								(CASE WHEN #TempvSkillsCourseAvg.Period05 IS NULL THEN
									(CASE WHEN #TempvSkillsCourseAvg.Period04 IS NULL THEN
										(CASE WHEN #TempvSkillsCourseAvg.Period03 IS NULL THEN
											(CASE WHEN #TempvSkillsCourseAvg.Period02 IS NULL THEN
												(CASE WHEN #TempvSkillsCourseAvg.Period01 IS NULL THEN
												NULL
												ELSE #TempvSkillsCourseAvg.Period01 END)
											ELSE #TempvSkillsCourseAvg.Period02 END)
										ELSE #TempvSkillsCourseAvg.Period03 END)
									ELSE #TempvSkillsCourseAvg.Period04 END) 
								ELSE #TempvSkillsCourseAvg.Period05 END)
							ELSE #TempvSkillsCourseAvg.Period06 END)
						ELSE #TempvSkillsCourseAvg.Period07 END)
					ELSE #TempvSkillsCourseAvg.Period08 END)
				ELSE #TempvSkillsCourseAvg.Period09 END)
			ELSE #TempvSkillsCourseAvg.Period10 END)
			AS MostRecentPeriodValue
		INTO 
			#TempvSkillsCourseAvg_Latest
		FROM
			#TempvSkillsCourseAvg


				--Now put it all together...
				--Firstly, Clear out the DELTA_Enrolment_Information table for @DELTACategoryID
				DELETE DELTA_Enrolment_Information 
				FROM DELTA_Enrolment_Information 
					INNER JOIN #TempvSkillsCourseAvg_Latest
					ON DELTA_Enrolment_Information.AcademicYearID = #TempvSkillsCourseAvg_Latest.AcademicYearID
					AND DELTA_Enrolment_Information.StudentRef = #TempvSkillsCourseAvg_Latest.StudentRef
					AND DELTA_Enrolment_Information.CourseID = #TempvSkillsCourseAvg_Latest.CourseID
				WHERE DELTACategoryID = @DELTACategoryID

				--And populate...
				INSERT DELTA_Enrolment_Information
						(AcademicYearID, StudentRef, OGP_StudentID, CourseID, DeltaCategoryID, [Value], Information, Imported_Date)

				SELECT DISTINCT 
					OGP_Enrolment.AcademicYearID,
					t.StudentRef,
					OGP_Enrolment.OGP_StudentID,
					t.CourseID,
					@DELTACategoryID AS DELTACategoryID,
					MostRecentPeriodValue AS [Value],
					CAST(MostRecentPeriodValue AS varchar(100)) AS Information,
					GetDate() AS DELTA_Value_Date
				FROM 
					#TempvSkillsCourseAvg_Latest t
						INNER JOIN OGP_Enrolment
						ON t.AcademicYearID = OGP_Enrolment.AcademicYearID
						AND t.StudentRef = OGP_Enrolment.StudentRef
						AND t.CourseID = OGP_Enrolment.OriginalCourseID
							INNER JOIN Course
							ON Course.ID = t.CourseID
				WHERE 
					MostRecentPeriodValue IS NOT NULL
					AND NOT EXISTS (SELECT ID FROM DELTA_Enrolment_Information 
									WHERE DELTA_Enrolment_Information.DeltaCategoryID = @DELTACategoryID
									AND DELTA_Enrolment_Information.AcademicYearID = t.AcademicYearID
									AND DELTA_Enrolment_Information.StudentRef = t.StudentRef
									AND DELTA_Enrolment_Information.CourseID = t.CourseID)



END



GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsStudentAnswer_Update]    Script Date: 02/05/2024 11:07:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsStudentAnswer_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsStudentAnswer_Update] AS' 
END
GO




ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsStudentAnswer_Update]
@ID             INTEGER, 
@CourseID       INTEGER,
@StudentID      INTEGER,
@PeriodID       INTEGER,
@QuestionID     INTEGER, 
@AnswerID       INTEGER,
@AnswerText     VARCHAR(512),
@UserId         INTEGER

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 27/04/2024 
-- Descripton:	SP to Add or Update a Student Question Answer
--              Note: UPDATE writes 2 Audit entries - one for ID and one for Text
--              Note: UserId is passed in
-- Example:     exec sp_WebPlus_SkillsStudentAnswer_Update 12, 34, 56, 78, 90, 'Some Text', 1
-- =============================================
DECLARE @newID               INT;
DECLARE @UserName            VARCHAR(255);
DECLARE @UpdatedWhen         DATETIME = GetDate();
DECLARE @TypeOfChange        VARCHAR(50);
DECLARE @RowDescription      VARCHAR(500);
DECLARE @AcademicYearID      VARCHAR(5);
DECLARE @Forenames           VARCHAR(100);
DECLARE @Surname             VARCHAR(100);
DECLARE @CourseCode          VARCHAR(50);
DECLARE @ExistingAnswerID    INTEGER;
DECLARE @ExistingAnswerText  VARCHAR(512);
DECLARE @ExistingAnswerDescription  VARCHAR(100);
DECLARE @NewAnswerDescription       VARCHAR(100);

Print 'Updating ID:';
Print @ID;

-- ***********************************************************
--  Get the Username
-- ***********************************************************
SELECT 
	@UserName = [User].UserName
FROM 
	[User] 
WHERE 
	UserID = @UserId;

-- ***********************************************************
--  Get the Course Details
-- ***********************************************************
SELECT 
	@CourseCode = CourseCode 
FROM 
	Course 
WHERE 
	ID = @CourseID;

-- ***********************************************************
--  Get the Student Details
-- ***********************************************************
SELECT 
	@AcademicYearID = AcademicYearID,
	@Forenames = ISNULL(Forenames, ''),
	@Surname = ISNULL(Surname, '')
FROM
	OGP_Student
WHERE
	ID = @StudentID;

-- ***********************************************************
--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
-- ***********************************************************
SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);

--check if UserId was found
IF IsNull(@UserName, '') = ''
BEGIN
	--No User Found - return -99
	SET @newID = -99;
END
ELSE
BEGIN
	--Check if New record
	IF (@ID <= 0)  
	BEGIN
		--New record - Only save if an Answer is selected
		IF @AnswerID > 0
		BEGIN
			--Perform the Insert
			INSERT INTO 
			  SkillsStudentAnswer (OGP_StudentID, SkillsPeriodID, SkillsQuestionID, SkillsAnswerID, AnswerText, UpdatedBy, UpdatedWhen)
			VALUES
			  (@StudentID, @PeriodID, @QuestionID, @AnswerID, @AnswerText, @UserName, @UpdatedWhen);

			--Get the new ID return value
			SELECT @newID = SCOPE_IDENTITY();

			--Check if we've updated a record
			IF @newID Is Not Null
			BEGIN
				--get the Description for the AnswerID
				SELECT @NewAnswerDescription = Description FROM SkillsAnswer WHERE ID = @AnswerID; 

				--Update AuditTrail for AnswerID
				INSERT INTO AuditTrail 
					(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
				VALUES
					(@UpdatedWhen, @UserName, 'INSERT', 'SkillsStudentAnswer', @newID, @RowDescription, 'SkillsAnswerID', null, @AnswerID, null, @NewAnswerDescription);

				--Update AuditTrail for AnswerText
				IF IsNull(@AnswerText, '') != ''
				BEGIN
					INSERT INTO AuditTrail 
						(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
					VALUES
						(@UpdatedWhen, @UserName, 'INSERT', 'SkillsStudentAnswer', @newID, @RowDescription, 'AnswerText', Null, Null, null, @AnswerText)
				END
			END
		END
		ELSE
		BEGIN
			--No answer selected, so no need to save - return -999
			SET @newID = -999;
		END
	END
	ELSE
	BEGIN
		--Update Existing Record
		IF EXISTS (SELECT 1 FROM SkillsStudentAnswer WHERE ID = @ID) 
		BEGIN
			--Check if they've de-selected
			IF @AnswerID < 0
			BEGIN
				--**************************
				--  Delete Existing record
				--**************************

				--Get the existing values
				SELECT 
					@ExistingAnswerID   = SkillsAnswerID,
					@ExistingAnswerText = AnswerText
				FROM 
					SkillsStudentAnswer
				WHERE
					ID = @ID;

				--Delete Existing record
				DELETE FROM 
					SkillsStudentAnswer
				WHERE
					ID = @ID;

				--return -2 for Deleted
				SET @newID = -2;

				--Update AuditTrail
				INSERT INTO AuditTrail 
					(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
				VALUES
					(@UpdatedWhen, @UserName, 'DELETE', 'SkillsStudentAnswer', @ID, @RowDescription, '', null, null, null, null);

			END
			ELSE
			BEGIN
				--**************************
				--  Update Existing record
				--**************************

				--Get the existing values
				SELECT 
					@ExistingAnswerID   = SkillsAnswerID,
					@ExistingAnswerText = AnswerText
				FROM 
					SkillsStudentAnswer
				WHERE
					ID = @ID;

				--Perform the Update
				UPDATE 
				  SkillsStudentAnswer 
				SET
				  SkillsAnswerID = @AnswerID, 
				  AnswerText = @AnswerText,
				  UpdatedBy = @UserName,
				  UpdatedWhen = @UpdatedWhen
				WHERE
				  ID = @ID;

				--Set the return value
				SET @newID = @ID;

				--Check if we've updated a record
				IF @newID Is Not Null
				BEGIN
					--Update AuditTrail for AnswerID
					IF IsNull(@ExistingAnswerID, -1) != IsNull(@AnswerID, -1)
					BEGIN
						--get the Description for the AnswerID
						SELECT @NewAnswerDescription = Description FROM SkillsAnswer WHERE ID = @AnswerID; 
						SELECT @ExistingAnswerDescription = Description FROM SkillsAnswer WHERE ID = @ExistingAnswerID;

						INSERT INTO AuditTrail 
							(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
						VALUES
							(@UpdatedWhen, @UserName, 'UPDATE', 'SkillsStudentAnswer', @ID, @RowDescription, 'SkillsAnswerID', @ExistingAnswerID, @AnswerID, @ExistingAnswerDescription, @NewAnswerDescription)
					END
			
					--Update AuditTrail for AnswerText
					IF IsNull(@ExistingAnswerText, '') != IsNull(@AnswerText, '')
					BEGIN
						INSERT INTO AuditTrail 
							(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
						VALUES
							(@UpdatedWhen, @UserName, 'UPDATE', 'SkillsStudentAnswer', @ID, @RowDescription, 'AnswerText', Null, Null, @ExistingAnswerText, @AnswerText)
					END
				END
			END
		END
		ELSE
		BEGIN
			--ID Not Found
			SET @newID = -1;
		END
	END
END

Print 'Return Value:'
Print @newID;

SELECT @newID;

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsCourseStudentAnswer_Update]    Script Date: 02/05/2024 11:07:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsCourseStudentAnswer_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsCourseStudentAnswer_Update] AS' 
END
GO






ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsCourseStudentAnswer_Update]
@ID             INTEGER, 
@CourseID       INTEGER,
@StudentID      INTEGER,
@PeriodID       INTEGER,
@QuestionID     INTEGER, 
@AnswerID       INTEGER,
@AnswerText     VARCHAR(512),
@UserId         INTEGER

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 27/04/2024 
-- Descripton:	SP to Add or Update a Student Course Question Answer
--              Note: UPDATE writes 2 Audit entries - one for ID and one for Text
--              Note: UserId is passed in
-- Example:     exec sp_WebPlus_SkillsCourseStudentAnswer_Update 12, 34, 56, 78, 90, 'Some Text', 1
-- =============================================
DECLARE @newID               INT;
DECLARE @UserName            VARCHAR(255);
DECLARE @UpdatedWhen         DATETIME = GetDate();
DECLARE @TypeOfChange        VARCHAR(50);
DECLARE @RowDescription      VARCHAR(500);
DECLARE @AcademicYearID      VARCHAR(5);
DECLARE @Forenames           VARCHAR(100);
DECLARE @Surname             VARCHAR(100);
DECLARE @CourseCode          VARCHAR(50);
DECLARE @ExistingAnswerID    INTEGER;
DECLARE @ExistingAnswerText  VARCHAR(512);
DECLARE @ExistingAnswerDescription  VARCHAR(100);
DECLARE @NewAnswerDescription       VARCHAR(100);

Print 'Updating ID:';
Print @ID;


-- ***********************************************************
--  Get the Username
-- ***********************************************************
SELECT 
	@UserName = [User].UserName
FROM 
	[User] 
WHERE 
	UserID = @UserId;

-- ***********************************************************
--  Get the Course Details
-- ***********************************************************
SELECT 
	@CourseCode = CourseCode 
FROM 
	Course 
WHERE 
	ID = @CourseID;

-- ***********************************************************
--  Get the Student Details
-- ***********************************************************
SELECT 
	@AcademicYearID = AcademicYearID,
	@Forenames = ISNULL(Forenames, ''),
	@Surname = ISNULL(Surname, '')
FROM
	OGP_Student
WHERE
	ID = @StudentID;

-- ***********************************************************
--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
-- ***********************************************************
SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);

--check if UserId was found
IF IsNull(@UserName, '') = ''
BEGIN
	--No User Found - return -99
	SET @newID = -99;
END
ELSE
BEGIN
	--Check if New record
	IF (@ID <= 0)  
	BEGIN
		--New record
		--Only save if an Answer is selected
		IF @AnswerID > 0
		BEGIN
			--Perform the Insert
			INSERT INTO 
			  SkillsCourseStudentAnswer (CourseID, OGP_StudentID, SkillsPeriodID, SkillsCourseQuestionID, SkillsAnswerID, AnswerText, UpdatedBy, UpdatedWhen)
			VALUES
			  (@CourseID, @StudentID, @PeriodID, @QuestionID, @AnswerID, @AnswerText, @UserName, @UpdatedWhen);

			--Get the new ID return value
			SELECT @newID = SCOPE_IDENTITY();

			--Check if we've updated a record
			IF @newID Is Not Null
			BEGIN
				--get the Description for the AnswerID
				SELECT @NewAnswerDescription = Description FROM SkillsAnswer WHERE ID = @AnswerID; 

				--Update AuditTrail
				INSERT INTO AuditTrail 
					(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
				VALUES
					(@UpdatedWhen, @UserName, 'INSERT', 'SkillsCourseStudentAnswer', @newID, @RowDescription, 'SkillsAnswerID', null, @AnswerID, null, @NewAnswerDescription)

				--Update AuditTrail for AnswerText
				IF IsNull(@AnswerText, '') != ''
				BEGIN
					INSERT INTO AuditTrail 
						(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
					VALUES
						(@UpdatedWhen, @UserName, 'INSERT', 'SkillsCourseStudentAnswer', @newID, @RowDescription, 'AnswerText', Null, Null, null, @AnswerText)
				END

			END
		END
		ELSE
		BEGIN
			--No answer selected, so no need to save - return -999
			SET @newID = -999;
		END
	END
	ELSE
	BEGIN
		--Update Existing Record
		IF EXISTS (SELECT 1 FROM SkillsCourseStudentAnswer WHERE ID = @ID) 
		BEGIN
			--Check if they've de-selected
			IF @AnswerID < 0
			BEGIN
				--**************************
				--  Delete Existing record
				--**************************

				--Get the existing values
				SELECT 
					@ExistingAnswerID   = SkillsAnswerID,
					@ExistingAnswerText = AnswerText
				FROM 
					SkillsCourseStudentAnswer
				WHERE
					ID = @ID;

				--Delete Existing record
				DELETE FROM 
					SkillsCourseStudentAnswer
				WHERE
					ID = @ID;

				--return -2 for Deleted
				SET @newID = -2;

				--Update AuditTrail
				INSERT INTO AuditTrail 
					(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
				VALUES
					(@UpdatedWhen, @UserName, 'DELETE', 'SkillsCourseStudentAnswer', @ID, @RowDescription, '', null, null, null, null)

			END
			ELSE
			BEGIN
				--**************************
				--  Update Existing record
				--**************************

				--Get the existing values
				SELECT 
					@ExistingAnswerID   = SkillsAnswerID,
					@ExistingAnswerText = AnswerText
				FROM 
					SkillsCourseStudentAnswer
				WHERE
					ID = @ID;

				--Perform the Update
				UPDATE 
				  SkillsCourseStudentAnswer 
				SET
				  SkillsAnswerID = @AnswerID, 
				  AnswerText = @AnswerText,
				  UpdatedBy = @UserName,
				  UpdatedWhen = @UpdatedWhen
				WHERE
				  ID = @ID;

				--Set the return value
				SET @newID = @ID;

				--Check if we've updated a record
				IF @newID Is Not Null
				BEGIN
					--Update AuditTrail for AnswerID
					IF IsNull(@ExistingAnswerID, -1) != IsNull(@AnswerID, -1)
					BEGIN
						--get the Description for the AnswerID
						SELECT @NewAnswerDescription = Description FROM SkillsAnswer WHERE ID = @AnswerID; 
						SELECT @ExistingAnswerDescription = Description FROM SkillsAnswer WHERE ID = @ExistingAnswerID;

						INSERT INTO AuditTrail 
							(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
						VALUES
							(@UpdatedWhen, @UserName, 'UPDATE', 'SkillsCourseStudentAnswer', @ID, @RowDescription, 'SkillsAnswerID', @ExistingAnswerID, @AnswerID, @ExistingAnswerDescription, @NewAnswerDescription)
					END
			
					--Update AuditTrail for AnswerText
					IF IsNull(@ExistingAnswerText, '') != IsNull(@AnswerText, '')
					BEGIN
						INSERT INTO AuditTrail 
							(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
						VALUES
							(@UpdatedWhen, @UserName, 'UPDATE', 'SkillsCourseStudentAnswer', @ID, @RowDescription, 'AnswerText', Null, Null, @ExistingAnswerText, @AnswerText)
					END
				END
			END
		END
		ELSE
		BEGIN
			--ID Not Found
			SET @newID = -1;
		END
	END

END


Print 'Return Value:'
Print @newID;

SELECT @newID;

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_VAStudent_Update]    Script Date: 02/05/2024 11:07:47 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_VAStudent_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_VAStudent_Update] AS' 
END
GO






ALTER PROCEDURE [dbo].[sp_WebPlus_VAStudent_Update]
@StaffId        INTEGER,
@EstactVAID     INTEGER,
@PersonalTargetGrade   VARCHAR(255),
@Point1_Grade   VARCHAR(20),
@Point2_Grade   VARCHAR(20), 
@Point3_Grade   VARCHAR(20), 
@Point4_Grade   VARCHAR(20), 
@Point5_Grade   VARCHAR(20), 
@Point6_Grade   VARCHAR(20), 
@Point7_Grade   VARCHAR(20), 
@Point8_Grade   VARCHAR(20), 
@Point9_Grade   VARCHAR(20), 
@Point10_Grade  VARCHAR(20), 
@Point11_Grade  VARCHAR(20), 
@Point12_Grade  VARCHAR(20), 
@Point1_Notes   VARCHAR(1024),
@Point2_Notes   VARCHAR(1024),
@Point3_Notes   VARCHAR(1024),
@Point4_Notes   VARCHAR(1024),
@Point5_Notes   VARCHAR(1024),
@Point6_Notes   VARCHAR(1024),
@Point7_Notes   VARCHAR(1024),
@Point8_Notes   VARCHAR(1024),
@Point9_Notes   VARCHAR(1024),
@Point10_Notes  VARCHAR(1024),
@Point11_Notes  VARCHAR(1024),
@Point12_Notes  VARCHAR(1024),
@Point1_EffortID INT,
@Point2_EffortID INT,
@Point3_EffortID INT,
@Point4_EffortID INT,
@Point5_EffortID INT,
@Point6_EffortID INT,
@Point7_EffortID INT,
@Point8_EffortID INT,
@Point9_EffortID INT,
@Point10_EffortID INT,
@Point11_EffortID INT,
@Point12_EffortID INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 2/2/2023 
-- Modified:	AndyB 23/09/2023 @PersonalTargetGrade_Existing is now VARCHAR(255)
--              AndyB 11/10/2023 Create AuditTrail entries for changed values
--              AndyB 15/01/2024 Changed AuditChange value to either INSERT or UPDATE
--              AndyB 10/04/2024 v1.37.2 Bugfix: write UserName instead of StaffCode (join on UserID)
--
-- Descripton:	SP to Update the EstactVA (Grades and Notes) values
-- Example:     exec sp_WebPlus_VAStudent_Update
-- =============================================

DECLARE @newID          INT;
DECLARE @InYearGradeID  INT;
DECLARE @AcademicYearID VARCHAR(5);
DECLARE @LearningAimRef VARCHAR(8);
DECLARE @StudentID      INT;
DECLARE @EnrolmentID    INT;
DECLARE @CourseID       INT;
DECLARE @OriginalCourseID INT;

DECLARE @UserName       VARCHAR(255);
DECLARE @UserForenames  VARCHAR(100);
DECLARE @UserSurname    VARCHAR(100);

DECLARE @RowDescription VARCHAR(500);

DECLARE @Forenames      VARCHAR(100);
DECLARE @Surname        VARCHAR(100);
DECLARE @CourseCode     VARCHAR(50);

DECLARE @Point1_Grade_Existing VARCHAR(20);
DECLARE @Point2_Grade_Existing VARCHAR(20);
DECLARE @Point3_Grade_Existing VARCHAR(20);
DECLARE @Point4_Grade_Existing VARCHAR(20);
DECLARE @Point5_Grade_Existing VARCHAR(20);
DECLARE @Point6_Grade_Existing VARCHAR(20);
DECLARE @Point7_Grade_Existing VARCHAR(20);
DECLARE @Point8_Grade_Existing VARCHAR(20);
DECLARE @Point9_Grade_Existing VARCHAR(20);
DECLARE @Point10_Grade_Existing VARCHAR(20);
DECLARE @Point11_Grade_Existing VARCHAR(20);
DECLARE @Point12_Grade_Existing VARCHAR(20);

DECLARE @Point1_Notes_Existing VARCHAR(1024);
DECLARE @Point2_Notes_Existing VARCHAR(1024);
DECLARE @Point3_Notes_Existing VARCHAR(1024);
DECLARE @Point4_Notes_Existing VARCHAR(1024);
DECLARE @Point5_Notes_Existing VARCHAR(1024);
DECLARE @Point6_Notes_Existing VARCHAR(1024);
DECLARE @Point7_Notes_Existing VARCHAR(1024);
DECLARE @Point8_Notes_Existing VARCHAR(1024);
DECLARE @Point9_Notes_Existing VARCHAR(1024);
DECLARE @Point10_Notes_Existing VARCHAR(1024);
DECLARE @Point11_Notes_Existing VARCHAR(1024);
DECLARE @Point12_Notes_Existing VARCHAR(1024);

DECLARE @Point1_EffortDescription_Existing VARCHAR(100);
DECLARE @Point2_EffortDescription_Existing VARCHAR(100);
DECLARE @Point3_EffortDescription_Existing VARCHAR(100);
DECLARE @Point4_EffortDescription_Existing VARCHAR(100);
DECLARE @Point5_EffortDescription_Existing VARCHAR(100);
DECLARE @Point6_EffortDescription_Existing VARCHAR(100);
DECLARE @Point7_EffortDescription_Existing VARCHAR(100);
DECLARE @Point8_EffortDescription_Existing VARCHAR(100);
DECLARE @Point9_EffortDescription_Existing VARCHAR(100);
DECLARE @Point10_EffortDescription_Existing VARCHAR(100);
DECLARE @Point11_EffortDescription_Existing VARCHAR(100);
DECLARE @Point12_EffortDescription_Existing VARCHAR(100);

DECLARE @Point1_EffortDescription_New VARCHAR(100);
DECLARE @Point2_EffortDescription_New VARCHAR(100);
DECLARE @Point3_EffortDescription_New VARCHAR(100);
DECLARE @Point4_EffortDescription_New VARCHAR(100);
DECLARE @Point5_EffortDescription_New VARCHAR(100);
DECLARE @Point6_EffortDescription_New VARCHAR(100);
DECLARE @Point7_EffortDescription_New VARCHAR(100);
DECLARE @Point8_EffortDescription_New VARCHAR(100);
DECLARE @Point9_EffortDescription_New VARCHAR(100);
DECLARE @Point10_EffortDescription_New VARCHAR(100);
DECLARE @Point11_EffortDescription_New VARCHAR(100);
DECLARE @Point12_EffortDescription_New VARCHAR(100);

DECLARE @Point1_EffortID_Existing INT;
DECLARE @Point2_EffortID_Existing INT;
DECLARE @Point3_EffortID_Existing INT;
DECLARE @Point4_EffortID_Existing INT;
DECLARE @Point5_EffortID_Existing INT;
DECLARE @Point6_EffortID_Existing INT;
DECLARE @Point7_EffortID_Existing INT;
DECLARE @Point8_EffortID_Existing INT;
DECLARE @Point9_EffortID_Existing INT;
DECLARE @Point10_EffortID_Existing INT;
DECLARE @Point11_EffortID_Existing INT;
DECLARE @Point12_EffortID_Existing INT;

DECLARE @PersonalTargetGrade_Existing VARCHAR(255);

DECLARE @TypeOfChange VARCHAR(50);

-- ***********************************************************
--  Check if the Student ID already exists
-- ***********************************************************
IF EXISTS (SELECT 1 FROM EstActVA WHERE EstactVA.ID = @EstactVAID)
BEGIN
    Print 'EstactVAID Exists';

	-- ***********************************************************
	--  Get the details from the main table: EstactVA
	-- ***********************************************************
	SELECT 
		@AcademicYearID = EstactVA.AcademicYearID,
		@Forenames = ISNULL(EstactVA.Forenames, ''),
		@Surname = ISNULL(EstactVA.Surname, ''),
		@CourseCode = ISNULL(EstactVA.CourseCode, ''),
		@StudentID = Enrolment.StudentID,
		@EnrolmentID = Enrolment.ID,
		@LearningAimRef = Enrolment.LearningAimRef,
		@CourseID = Enrolment.CourseID,
		@OriginalCourseID = OGP_Enrolment.OriginalCourseID,
		@PersonalTargetGrade_Existing = ISNULL(EstactVA.PersonalTargetGrade, ''),
--
		@Point1_Grade_Existing = ISNULL(EstactVA.Point1_Grade, ''),
		@Point2_Grade_Existing = ISNULL(EstactVA.Point2_Grade, ''),
		@Point3_Grade_Existing = ISNULL(EstactVA.Point3_Grade, ''),
		@Point4_Grade_Existing = ISNULL(EstactVA.Point4_Grade, ''),
		@Point5_Grade_Existing = ISNULL(EstactVA.Point5_Grade, ''),
		@Point6_Grade_Existing = ISNULL(EstactVA.Point6_Grade, ''),
		@Point7_Grade_Existing = ISNULL(EstactVA.Point7_Grade, ''),
		@Point8_Grade_Existing = ISNULL(EstactVA.Point8_Grade, ''),
		@Point9_Grade_Existing = ISNULL(EstactVA.Point9_Grade, ''),
		@Point10_Grade_Existing = ISNULL(EstactVA.Point10_Grade, ''),
		@Point11_Grade_Existing = ISNULL(EstactVA.Point11_Grade, ''),
		@Point12_Grade_Existing = ISNULL(EstactVA.Point12_Grade, ''),
--		
		@Point1_Notes_Existing = ISNULL(EstactVA.Point1_Notes, ''),
		@Point2_Notes_Existing = ISNULL(EstactVA.Point2_Notes, ''),
		@Point3_Notes_Existing = ISNULL(EstactVA.Point3_Notes, ''),
		@Point4_Notes_Existing = ISNULL(EstactVA.Point4_Notes, ''),
		@Point5_Notes_Existing = ISNULL(EstactVA.Point5_Notes, ''),
		@Point6_Notes_Existing = ISNULL(EstactVA.Point6_Notes, ''),
		@Point7_Notes_Existing = ISNULL(EstactVA.Point7_Notes, ''),
		@Point8_Notes_Existing = ISNULL(EstactVA.Point8_Notes, ''),
		@Point9_Notes_Existing = ISNULL(EstactVA.Point9_Notes, ''),
		@Point10_Notes_Existing = ISNULL(EstactVA.Point10_Notes, ''),
		@Point11_Notes_Existing = ISNULL(EstactVA.Point11_Notes, ''),
		@Point12_Notes_Existing = ISNULL(EstactVA.Point12_Notes, ''),
--
		@Point1_EffortDescription_Existing = ISNULL(EstActVA.Point1_EffortDescription, ''),
		@Point2_EffortDescription_Existing = ISNULL(EstActVA.Point2_EffortDescription, ''),
		@Point3_EffortDescription_Existing = ISNULL(EstActVA.Point3_EffortDescription, ''),
		@Point4_EffortDescription_Existing = ISNULL(EstActVA.Point4_EffortDescription, ''),
		@Point5_EffortDescription_Existing = ISNULL(EstActVA.Point5_EffortDescription, ''),
		@Point6_EffortDescription_Existing = ISNULL(EstActVA.Point6_EffortDescription, ''),
		@Point7_EffortDescription_Existing = ISNULL(EstActVA.Point7_EffortDescription, ''),
		@Point8_EffortDescription_Existing = ISNULL(EstActVA.Point8_EffortDescription, ''),
		@Point9_EffortDescription_Existing = ISNULL(EstActVA.Point9_EffortDescription, ''),
		@Point10_EffortDescription_Existing = ISNULL(EstActVA.Point10_EffortDescription, ''),
		@Point11_EffortDescription_Existing = ISNULL(EstActVA.Point11_EffortDescription, ''),
		@Point12_EffortDescription_Existing = ISNULL(EstActVA.Point12_EffortDescription, '')
	 FROM 
		EstactVA 
			INNER JOIN Enrolment ON Enrolment.ID = EstactVA.ID
				INNER JOIN OGP_Enrolment  ON OGP_Enrolment.StudentRef = Enrolment.StudentRef AND 
				                             OGP_Enrolment.AcademicYearID = Enrolment.AcademicYearID AND
											 OGP_Enrolment.CourseID = Enrolment.CourseID
	 WHERE 
		EstactVA.ID = @EstactVAID; 


	-- ***********************************************************
	--  Get the EffortGrade Description from the ID
	-- ***********************************************************
	SELECT @Point1_EffortDescription_New = '';
	SELECT @Point2_EffortDescription_New = '';
	SELECT @Point3_EffortDescription_New = '';
	SELECT @Point4_EffortDescription_New = '';
	SELECT @Point5_EffortDescription_New = '';
	SELECT @Point6_EffortDescription_New = '';
	SELECT @Point7_EffortDescription_New = '';
	SELECT @Point8_EffortDescription_New = '';
	SELECT @Point9_EffortDescription_New = '';
	SELECT @Point10_EffortDescription_New = '';
	SELECT @Point11_EffortDescription_New = '';
	SELECT @Point12_EffortDescription_New = '';

	SELECT @Point1_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point1_EffortID, 0);
	SELECT @Point2_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point2_EffortID, 0);
	SELECT @Point3_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point3_EffortID, 0);
	SELECT @Point4_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point4_EffortID, 0);
	SELECT @Point5_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point5_EffortID, 0);
	SELECT @Point6_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point6_EffortID, 0);
	SELECT @Point7_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point7_EffortID, 0);
	SELECT @Point8_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point8_EffortID, 0);
	SELECT @Point9_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point9_EffortID, 0);
	SELECT @Point10_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point10_EffortID, 0);
	SELECT @Point11_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point11_EffortID, 0);
	SELECT @Point12_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point12_EffortID, 0);


	-- ***********************************************************
	--  Get the Staff Username
	-- ***********************************************************
	--SELECT @UserName = StaffCode FROM Staff WHERE StaffID = @StaffId;
	SELECT 
		@UserName = [User].UserName,
		@UserForenames = [User].Forenames,
		@UserSurname = [User].Surname
	FROM Staff 
		INNER JOIN [User] ON [User].UserID = Staff.UserID
	WHERE 
	    StaffID = @StaffId;


	-- ***********************************************************
	--  Create the InYearGrade record if it doesnt exist
	-- ***********************************************************
	SELECT 
		@InYearGradeID = InYearGrade.ID 
	FROM 
		InYearGrade 
	WHERE 
		AcademicYearID = @AcademicYearID    AND 
		CourseID       = @OriginalCourseID  AND
		StudentID      = @StudentID;

	IF @InYearGradeID IS NULL
	BEGIN
		Print '@InYearGradeID IS NULL';

		INSERT INTO InYearGrade 
			(AcademicYearID, StudentID, CourseID, 
			 Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
			 Point1_Grade_Updated, Point2_Grade_Updated, Point3_Grade_Updated, Point4_Grade_Updated, Point5_Grade_Updated, Point6_Grade_Updated, Point7_Grade_Updated, Point8_Grade_Updated, Point9_Grade_Updated, Point10_Grade_Updated, Point11_Grade_Updated, Point12_Grade_Updated, 
			 PersonalTargetGrade,
			 Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, 
			 LearningAimRef,
			 Point1_EffortID, Point2_EffortID, Point3_EffortID, Point4_EffortID, Point5_EffortID, Point6_EffortID, Point7_EffortID, Point8_EffortID, Point9_EffortID, Point10_EffortID, Point11_EffortID, Point12_EffortID 
			 ) 
		VALUES 
			(
				--Note: we write the Orig Course ID
				@AcademicYearID, @StudentID, @OriginalCourseID,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
				Null,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				null,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
			);
		
		--get the new ID
		SELECT @InYearGradeID = SCOPE_IDENTITY();
	END

	Print '@InYearGradeID=' + CONVERT(varchar(10), @InYearGradeID);
	

	-- ***********************************************************
	--  Update the InYearGrade table
	-- ***********************************************************
	UPDATE 
		InYearGrade
	SET 
		PersonalTargetGrade = (IIF(@PersonalTargetGrade = '', Null, @PersonalTargetGrade)),
		LearningAimRef = @LearningAimRef,

		Point1_Grade = (IIF(@Point1_Grade = '', Null, @Point1_Grade)),
		Point2_Grade = (IIF(@Point2_Grade = '', Null, @Point2_Grade)),
		Point3_Grade = (IIF(@Point3_Grade = '', Null, @Point3_Grade)),
		Point4_Grade = (IIF(@Point4_Grade = '', Null, @Point4_Grade)),
		Point5_Grade = (IIF(@Point5_Grade = '', Null, @Point5_Grade)),
		Point6_Grade = (IIF(@Point6_Grade = '', Null, @Point6_Grade)),
		Point7_Grade = (IIF(@Point7_Grade = '', Null, @Point7_Grade)),
		Point8_Grade = (IIF(@Point8_Grade = '', Null, @Point8_Grade)),
		Point9_Grade = (IIF(@Point9_Grade = '', Null, @Point9_Grade)),
		Point10_Grade = (IIF(@Point10_Grade = '', Null, @Point10_Grade)),
		Point11_Grade = (IIF(@Point11_Grade = '', Null, @Point11_Grade)),
		Point12_Grade = (IIF(@Point12_Grade = '', Null, @Point12_Grade)),

		Point1_Grade_Updated = (CASE WHEN @Point1_Grade_Existing = @Point1_Grade THEN 0 ELSE 1 END),
		Point2_Grade_Updated = (CASE WHEN @Point2_Grade_Existing = @Point2_Grade THEN 0 ELSE 1 END),
		Point3_Grade_Updated = (CASE WHEN @Point3_Grade_Existing = @Point3_Grade THEN 0 ELSE 1 END),
		Point4_Grade_Updated = (CASE WHEN @Point4_Grade_Existing = @Point4_Grade THEN 0 ELSE 1 END),
		Point5_Grade_Updated = (CASE WHEN @Point5_Grade_Existing = @Point5_Grade THEN 0 ELSE 1 END),
		Point6_Grade_Updated = (CASE WHEN @Point6_Grade_Existing = @Point6_Grade THEN 0 ELSE 1 END),
		Point7_Grade_Updated = (CASE WHEN @Point7_Grade_Existing = @Point7_Grade THEN 0 ELSE 1 END),
		Point8_Grade_Updated = (CASE WHEN @Point8_Grade_Existing = @Point8_Grade THEN 0 ELSE 1 END),
		Point9_Grade_Updated = (CASE WHEN @Point9_Grade_Existing = @Point9_Grade THEN 0 ELSE 1 END),
		Point10_Grade_Updated = (CASE WHEN @Point10_Grade_Existing = @Point10_Grade THEN 0 ELSE 1 END),
		Point11_Grade_Updated = (CASE WHEN @Point11_Grade_Existing = @Point11_Grade THEN 0 ELSE 1 END),
		Point12_Grade_Updated = (CASE WHEN @Point12_Grade_Existing = @Point12_Grade THEN 0 ELSE 1 END),

		Point1_Notes = (IIF(@Point1_Notes = '', Null, @Point1_Notes)),
		Point2_Notes = (IIF(@Point2_Notes = '', Null, @Point2_Notes)),
		Point3_Notes = (IIF(@Point3_Notes = '', Null, @Point3_Notes)),
		Point4_Notes = (IIF(@Point4_Notes = '', Null, @Point4_Notes)),
		Point5_Notes = (IIF(@Point5_Notes = '', Null, @Point5_Notes)),
		Point6_Notes = (IIF(@Point6_Notes = '', Null, @Point6_Notes)),
		Point7_Notes = (IIF(@Point7_Notes = '', Null, @Point7_Notes)),
		Point8_Notes = (IIF(@Point8_Notes = '', Null, @Point8_Notes)),
		Point9_Notes = (IIF(@Point9_Notes = '', Null, @Point9_Notes)),
		Point10_Notes = (IIF(@Point10_Notes = '', Null, @Point10_Notes)),
		Point11_Notes = (IIF(@Point11_Notes = '', Null, @Point11_Notes)),
		Point12_Notes = (IIF(@Point12_Notes = '', Null, @Point12_Notes)),

		Point1_EffortID = (IIF(@Point1_EffortID <= 0, Null, @Point1_EffortID)),
		Point2_EffortID = (IIF(@Point2_EffortID <= 0, Null, @Point2_EffortID)),
		Point3_EffortID = (IIF(@Point3_EffortID <= 0, Null, @Point3_EffortID)),
		Point4_EffortID = (IIF(@Point4_EffortID <= 0, Null, @Point4_EffortID)),
		Point5_EffortID = (IIF(@Point5_EffortID <= 0, Null, @Point5_EffortID)),
		Point6_EffortID = (IIF(@Point6_EffortID <= 0, Null, @Point6_EffortID)),
		Point7_EffortID = (IIF(@Point7_EffortID <= 0, Null, @Point7_EffortID)),
		Point8_EffortID = (IIF(@Point8_EffortID <= 0, Null, @Point8_EffortID)),
		Point9_EffortID = (IIF(@Point9_EffortID <= 0, Null, @Point9_EffortID)),
		Point10_EffortID = (IIF(@Point10_EffortID <= 0, Null, @Point10_EffortID)),
		Point11_EffortID = (IIF(@Point11_EffortID <= 0, Null, @Point11_EffortID)),
		Point12_EffortID = (IIF(@Point12_EffortID <= 0, Null, @Point12_EffortID))
	WHERE
		ID = @InYearGradeID;


	-- ***********************************************************
	--  Populate EnrolmentWebSave
	-- ***********************************************************
	DELETE FROM EnrolmentWebSave WHERE EnrolmentID = @EnrolmentID AND UserName = @UserName;
	INSERT INTO EnrolmentWebSave (EnrolmentID, UserName) VALUES (@EnrolmentID, @UserName);


	-- ***********************************************************
	--  Regenerate the EstactVA data 
	--  We now do this separately to speed up the whole process i.e. when multiple Student changes
	-- ***********************************************************
	--EXEC sp_Student_EstActVA_WebSave_Regenerate @AcademicYearID, @UserName


	-- ***********************************************************
	--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
	-- ***********************************************************
	SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);


	-- ***********************************************************
	--  Create Audit entries for the changed Grade fields
	-- ***********************************************************
	IF @Point1_Grade != @Point1_Grade_Existing BEGIN
	    IF IsNull(@Point1_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_Grade', null, null, @Point1_Grade_Existing, @Point1_Grade)
	END
	IF @Point2_Grade != @Point2_Grade_Existing BEGIN
	    IF IsNull(@Point2_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_Grade', null, null, @Point2_Grade_Existing, @Point2_Grade)
	END
	IF @Point3_Grade != @Point3_Grade_Existing BEGIN
	    IF IsNull(@Point3_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_Grade', null, null, @Point3_Grade_Existing, @Point3_Grade)
	END
	IF @Point4_Grade != @Point4_Grade_Existing BEGIN
	    IF IsNull(@Point4_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_Grade', null, null, @Point4_Grade_Existing, @Point4_Grade)
	END
	IF @Point5_Grade != @Point5_Grade_Existing BEGIN
	    IF IsNull(@Point5_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_Grade', null, null, @Point5_Grade_Existing, @Point5_Grade)
	END
	IF @Point6_Grade != @Point6_Grade_Existing BEGIN
	    IF IsNull(@Point6_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_Grade', null, null, @Point6_Grade_Existing, @Point6_Grade)
	END
	IF @Point7_Grade != @Point7_Grade_Existing BEGIN
	    IF IsNull(@Point7_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_Grade', null, null, @Point7_Grade_Existing, @Point7_Grade)
	END
	IF @Point8_Grade != @Point8_Grade_Existing BEGIN
	    IF IsNull(@Point8_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_Grade', null, null, @Point8_Grade_Existing, @Point8_Grade)
	END
	IF @Point9_Grade != @Point9_Grade_Existing BEGIN
	    IF IsNull(@Point9_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_Grade', null, null, @Point9_Grade_Existing, @Point9_Grade)
	END
	IF @Point10_Grade != @Point10_Grade_Existing BEGIN
	    IF IsNull(@Point10_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_Grade', null, null, @Point10_Grade_Existing, @Point10_Grade)
	END
	IF @Point11_Grade != @Point11_Grade_Existing BEGIN
	    IF IsNull(@Point11_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_Grade', null, null, @Point11_Grade_Existing, @Point11_Grade)
	END
	IF @Point12_Grade != @Point12_Grade_Existing BEGIN
	    IF IsNull(@Point12_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_Grade', null, null, @Point12_Grade_Existing, @Point12_Grade)
	END


	-- ***********************************************************
	--   Create Audit entries for the changed Notes fields
	-- ***********************************************************
	IF @Point1_Notes != @Point1_Notes_Existing BEGIN
	    IF IsNull(@Point1_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_Notes', null, null, @Point1_Notes_Existing, @Point1_Notes)
	END
	IF @Point2_Notes != @Point2_Notes_Existing BEGIN
	    IF IsNull(@Point2_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_Notes', null, null, @Point2_Notes_Existing, @Point2_Notes)
	END
	IF @Point3_Notes != @Point3_Notes_Existing BEGIN
	    IF IsNull(@Point3_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_Notes', null, null, @Point3_Notes_Existing, @Point3_Notes)
	END
	IF @Point4_Notes != @Point4_Notes_Existing BEGIN
	    IF IsNull(@Point4_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_Notes', null, null, @Point4_Notes_Existing, @Point4_Notes)
	END
	IF @Point5_Notes != @Point5_Notes_Existing BEGIN
	    IF IsNull(@Point5_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_Notes', null, null, @Point5_Notes_Existing, @Point5_Notes)
	END
	IF @Point6_Notes != @Point6_Notes_Existing BEGIN
	    IF IsNull(@Point6_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_Notes', null, null, @Point6_Notes_Existing, @Point6_Notes)
	END
	IF @Point7_Notes != @Point7_Notes_Existing BEGIN
	    IF IsNull(@Point7_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_Notes', null, null, @Point7_Notes_Existing, @Point7_Notes)
	END
	IF @Point8_Notes != @Point8_Notes_Existing BEGIN
	    IF IsNull(@Point8_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_Notes', null, null, @Point8_Notes_Existing, @Point8_Notes)
	END
	IF @Point9_Notes != @Point9_Notes_Existing BEGIN
	    IF IsNull(@Point9_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_Notes', null, null, @Point9_Notes_Existing, @Point9_Notes)
	END
	IF @Point10_Notes != @Point10_Notes_Existing BEGIN
	    IF IsNull(@Point10_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_Notes', null, null, @Point10_Notes_Existing, @Point10_Notes)
	END
	IF @Point11_Notes != @Point11_Notes_Existing BEGIN
	    IF IsNull(@Point11_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_Notes', null, null, @Point11_Notes_Existing, @Point11_Notes)
	END
	IF @Point12_Notes != @Point12_Notes_Existing BEGIN
	    IF IsNull(@Point12_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_Notes', null, null, @Point12_Notes_Existing, @Point12_Notes)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed EffortGrade fields
	-- ***********************************************************
	IF @Point1_EffortDescription_New != @Point1_EffortDescription_Existing BEGIN
	    IF IsNull(@Point1_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_EffortID', null, null, @Point1_EffortDescription_Existing, @Point1_EffortDescription_New)
	END
	--Print '2 New      InYrDesc=' + @Point2_EffortDescription_New;
	--Print '2 Existing InYrDesc=' + @Point2_EffortDescription_Existing;
	IF @Point2_EffortDescription_New != @Point2_EffortDescription_Existing BEGIN
	    IF IsNull(@Point2_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_EffortID', null, null, @Point2_EffortDescription_Existing, @Point2_EffortDescription_New)
	END
	IF @Point3_EffortDescription_New != @Point3_EffortDescription_Existing BEGIN
	    IF IsNull(@Point3_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_EffortID', null, null, @Point3_EffortDescription_Existing, @Point3_EffortDescription_New)
	END
	IF @Point4_EffortDescription_New != @Point4_EffortDescription_Existing BEGIN
	    IF IsNull(@Point4_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_EffortID', null, null, @Point4_EffortDescription_Existing, @Point4_EffortDescription_New)
	END
	IF @Point5_EffortDescription_New != @Point5_EffortDescription_Existing BEGIN
	    IF IsNull(@Point5_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_EffortID', null, null, @Point5_EffortDescription_Existing, @Point5_EffortDescription_New)
	END
	IF @Point6_EffortDescription_New != @Point6_EffortDescription_Existing BEGIN
	    IF IsNull(@Point6_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_EffortID', null, null, @Point6_EffortDescription_Existing, @Point6_EffortDescription_New)
	END
	IF @Point7_EffortDescription_New != @Point7_EffortDescription_Existing BEGIN
	    IF IsNull(@Point7_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_EffortID', null, null, @Point7_EffortDescription_Existing, @Point7_EffortDescription_New)
	END
	IF @Point8_EffortDescription_New != @Point8_EffortDescription_Existing BEGIN
	    IF IsNull(@Point8_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_EffortID', null, null, @Point8_EffortDescription_Existing, @Point8_EffortDescription_New)
	END
	IF @Point9_EffortDescription_New != @Point9_EffortDescription_Existing BEGIN
	    IF IsNull(@Point9_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_EffortID', null, null, @Point9_EffortDescription_Existing, @Point9_EffortDescription_New)
	END
	IF @Point10_EffortDescription_New != @Point10_EffortDescription_Existing BEGIN
	    IF IsNull(@Point10_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_EffortID', null, null, @Point10_EffortDescription_Existing, @Point10_EffortDescription_New)
	END
	IF @Point11_EffortDescription_New != @Point11_EffortDescription_Existing BEGIN
	    IF IsNull(@Point11_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_EffortID', null, null, @Point11_EffortDescription_Existing, @Point11_EffortDescription_New)
	END
	IF @Point12_EffortDescription_New != @Point12_EffortDescription_Existing BEGIN
	    IF IsNull(@Point12_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_EffortID', null, null, @Point12_EffortDescription_Existing, @Point12_EffortDescription_New)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed PersonalTargetGrade fields
	-- ***********************************************************
	IF @PersonalTargetGrade != @PersonalTargetGrade_Existing BEGIN
	    IF IsNull(@PersonalTargetGrade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'PersonalTargetGrade', null, null, @PersonalTargetGrade_Existing, @PersonalTargetGrade)
	END	


	-- ***********************************************************
	--   Return 1 for success
	-- ***********************************************************
	SELECT 1;

END
ELSE
BEGIN
    Print 'EstactVA ID Doesnt Exist';

    --ID doesnt exist so return -1
	SELECT -1;
END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_EMStudent_Update]    Script Date: 02/05/2024 11:07:47 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_EMStudent_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_EMStudent_Update] AS' 
END
GO







ALTER PROCEDURE [dbo].[sp_WebPlus_EMStudent_Update]
@StaffId              INTEGER,
@EngMatType           VARCHAR(8),
@ID                   INTEGER,
@PersonalTargetGrade  VARCHAR(255),
@IsStartGradeChanged  BIT,
@StartGrade           VARCHAR(20)  = null,
@StartPoints          DECIMAL(9,2) = null,
@Point1_Grade   VARCHAR(20),
@Point2_Grade   VARCHAR(20), 
@Point3_Grade   VARCHAR(20), 
@Point4_Grade   VARCHAR(20), 
@Point5_Grade   VARCHAR(20), 
@Point6_Grade   VARCHAR(20), 
@Point7_Grade   VARCHAR(20), 
@Point8_Grade   VARCHAR(20), 
@Point9_Grade   VARCHAR(20), 
@Point10_Grade  VARCHAR(20), 
@Point11_Grade  VARCHAR(20), 
@Point12_Grade  VARCHAR(20), 
@Point1_Notes   VARCHAR(1024),
@Point2_Notes   VARCHAR(1024),
@Point3_Notes   VARCHAR(1024),
@Point4_Notes   VARCHAR(1024),
@Point5_Notes   VARCHAR(1024),
@Point6_Notes   VARCHAR(1024),
@Point7_Notes   VARCHAR(1024),
@Point8_Notes   VARCHAR(1024),
@Point9_Notes   VARCHAR(1024),
@Point10_Notes  VARCHAR(1024),
@Point11_Notes  VARCHAR(1024),
@Point12_Notes  VARCHAR(1024),
@Point1_EffortID INT,
@Point2_EffortID INT,
@Point3_EffortID INT,
@Point4_EffortID INT,
@Point5_EffortID INT,
@Point6_EffortID INT,
@Point7_EffortID INT,
@Point8_EffortID INT,
@Point9_EffortID INT,
@Point10_EffortID INT,
@Point11_EffortID INT,
@Point12_EffortID INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 2/2/2023 
-- Modified:	AndyB 23/09/2023 @PersonalTargetGrade_Existing is now VARCHAR(255)
--              AndyB 11/10/2023 Create AuditTrail entries for changed values
--              AndyB 15/01/2024 Changed AuditChange value to either INSERT or UPDATE
--              AndyB 30/01/2024 Fixed bug whereby StartGrade and points not written correctly (with or without IYGrade also being changed)
--              AndyB 10/04/2024 v1.37.2 Bugfix: write UserName instead of StaffCode (join on UserID)
--
-- Descripton:	SP to Update the EngMat_Enrolment_InYear (Grades and Notes) values
-- Example:     exec sp_WebPlus_EMStudent_Update 123, 'English', 123456, ...
-- =============================================

DECLARE @newID          INT;
DECLARE @InYearGradeID  INT;
DECLARE @AcademicYearID VARCHAR(5);
DECLARE @LearningAimRef VARCHAR(8);
DECLARE @StudentID      INT;
DECLARE @EnrolmentID    INT;
DECLARE @CourseID       INT;
DECLARE @OriginalCourseID INT;

DECLARE @UserName       VARCHAR(255);
DECLARE @UserForenames  VARCHAR(100);
DECLARE @UserSurname    VARCHAR(100);

DECLARE @RowDescription VARCHAR(500);

DECLARE @Forenames      VARCHAR(100);
DECLARE @Surname        VARCHAR(100);
DECLARE @CourseCode     VARCHAR(50);

DECLARE @StartGradeUserName   VARCHAR(100);
DECLARE @StartGradeDateTime   DATETIME;
DECLARE @StartGradeGrade      VARCHAR(20);
DECLARE @StartGradePoints     DECIMAL(9,2);

DECLARE @Point1_Grade_Existing VARCHAR(20);
DECLARE @Point2_Grade_Existing VARCHAR(20);
DECLARE @Point3_Grade_Existing VARCHAR(20);
DECLARE @Point4_Grade_Existing VARCHAR(20);
DECLARE @Point5_Grade_Existing VARCHAR(20);
DECLARE @Point6_Grade_Existing VARCHAR(20);
DECLARE @Point7_Grade_Existing VARCHAR(20);
DECLARE @Point8_Grade_Existing VARCHAR(20);
DECLARE @Point9_Grade_Existing VARCHAR(20);
DECLARE @Point10_Grade_Existing VARCHAR(20);
DECLARE @Point11_Grade_Existing VARCHAR(20);
DECLARE @Point12_Grade_Existing VARCHAR(20);

DECLARE @Point1_Notes_Existing VARCHAR(1024);
DECLARE @Point2_Notes_Existing VARCHAR(1024);
DECLARE @Point3_Notes_Existing VARCHAR(1024);
DECLARE @Point4_Notes_Existing VARCHAR(1024);
DECLARE @Point5_Notes_Existing VARCHAR(1024);
DECLARE @Point6_Notes_Existing VARCHAR(1024);
DECLARE @Point7_Notes_Existing VARCHAR(1024);
DECLARE @Point8_Notes_Existing VARCHAR(1024);
DECLARE @Point9_Notes_Existing VARCHAR(1024);
DECLARE @Point10_Notes_Existing VARCHAR(1024);
DECLARE @Point11_Notes_Existing VARCHAR(1024);
DECLARE @Point12_Notes_Existing VARCHAR(1024);

DECLARE @Point1_EffortDescription_Existing VARCHAR(100);
DECLARE @Point2_EffortDescription_Existing VARCHAR(100);
DECLARE @Point3_EffortDescription_Existing VARCHAR(100);
DECLARE @Point4_EffortDescription_Existing VARCHAR(100);
DECLARE @Point5_EffortDescription_Existing VARCHAR(100);
DECLARE @Point6_EffortDescription_Existing VARCHAR(100);
DECLARE @Point7_EffortDescription_Existing VARCHAR(100);
DECLARE @Point8_EffortDescription_Existing VARCHAR(100);
DECLARE @Point9_EffortDescription_Existing VARCHAR(100);
DECLARE @Point10_EffortDescription_Existing VARCHAR(100);
DECLARE @Point11_EffortDescription_Existing VARCHAR(100);
DECLARE @Point12_EffortDescription_Existing VARCHAR(100);

DECLARE @Point1_EffortDescription_New VARCHAR(100);
DECLARE @Point2_EffortDescription_New VARCHAR(100);
DECLARE @Point3_EffortDescription_New VARCHAR(100);
DECLARE @Point4_EffortDescription_New VARCHAR(100);
DECLARE @Point5_EffortDescription_New VARCHAR(100);
DECLARE @Point6_EffortDescription_New VARCHAR(100);
DECLARE @Point7_EffortDescription_New VARCHAR(100);
DECLARE @Point8_EffortDescription_New VARCHAR(100);
DECLARE @Point9_EffortDescription_New VARCHAR(100);
DECLARE @Point10_EffortDescription_New VARCHAR(100);
DECLARE @Point11_EffortDescription_New VARCHAR(100);
DECLARE @Point12_EffortDescription_New VARCHAR(100);

DECLARE @Point1_EffortID_Existing INT;
DECLARE @Point2_EffortID_Existing INT;
DECLARE @Point3_EffortID_Existing INT;
DECLARE @Point4_EffortID_Existing INT;
DECLARE @Point5_EffortID_Existing INT;
DECLARE @Point6_EffortID_Existing INT;
DECLARE @Point7_EffortID_Existing INT;
DECLARE @Point8_EffortID_Existing INT;
DECLARE @Point9_EffortID_Existing INT;
DECLARE @Point10_EffortID_Existing INT;
DECLARE @Point11_EffortID_Existing INT;
DECLARE @Point12_EffortID_Existing INT;

DECLARE @PersonalTargetGrade_Existing VARCHAR(255);

DECLARE @TypeOfChange VARCHAR(50);

-- ***********************************************************
--  Check if the Student ID already exists
-- ***********************************************************
IF EXISTS (SELECT 1 FROM EngMat_Enrolment_InYear WHERE EngMat_Enrolment_InYear.ID = @ID)
BEGIN

	-- ***********************************************************
	--  Set the default StartGrade values
	-- ***********************************************************
	SET @StartGradeUserName = NULL;
	SET @StartGradeDateTime = NULL;
	SET @StartGradeGrade    = NULL; -- @StartGrade;    
	SET @StartGradePoints   = NULL;

	-- ***********************************************************
	--  Get the details from the main table: EngMat_Enrolment_InYear
	-- ***********************************************************
	SELECT 
		--@EnrolmentID = EngMatEnrolment.ID,
		@AcademicYearID = EngMat_Enrolment_InYear.AcademicYearID,
		@Forenames = ISNULL(EngMat_Enrolment_InYear.Forenames, ''),
		@Surname = ISNULL(EngMat_Enrolment_InYear.Surname, ''),
		@CourseCode = ISNULL(EngMat_Enrolment_InYear.CourseCode, ''),
		@StudentID = EngMat_Enrolment_InYear.EngMatStudentID,
		@EnrolmentID = EngMat_Enrolment_InYear.ID,
		@LearningAimRef = EngMat_Enrolment_InYear.LearningAimRef,
		@CourseID = EngMat_Enrolment_InYear.CourseID,
		@OriginalCourseID = OGP_Enrolment.OriginalCourseID,
		@PersonalTargetGrade_Existing = ISNULL(EngMat_Enrolment_InYear.PersonalTargetGrade, ''),
		--
		@StartGradeGrade  = OGHighestPreviousGCSEGrade,
		@StartGradePoints = OGHighestPreviousGCSEPoints,
		@StartGradeUserName = OGHighestPreviousGCSEGradeSavedBy, 
		@StartGradeDateTime = OGHighestPreviousGCSEGradeSavedWhen,
		--
		@Point1_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade1, ''),
		@Point2_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade2, ''),
		@Point3_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade3, ''),
		@Point4_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade4, ''),
		@Point5_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade5, ''),
		@Point6_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade6, ''),
		@Point7_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade7, ''),
		@Point8_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade8, ''),
		@Point9_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade9, ''),
		@Point10_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade10, ''),
		@Point11_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade11, ''),
		@Point12_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade12, ''),
		--
		@Point1_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point1_Notes, ''),
		@Point2_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point2_Notes, ''),
		@Point3_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point3_Notes, ''),
		@Point4_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point4_Notes, ''),
		@Point5_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point5_Notes, ''),
		@Point6_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point6_Notes, ''),
		@Point7_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point7_Notes, ''),
		@Point8_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point8_Notes, ''),
		@Point9_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point9_Notes, ''),
		@Point10_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point10_Notes, ''),
		@Point11_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point11_Notes, ''),
		@Point12_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point12_Notes, ''),
--
		@Point1_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point1_EffortDescription, ''),
		@Point2_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point2_EffortDescription, ''),
		@Point3_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point3_EffortDescription, ''),
		@Point4_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point4_EffortDescription, ''),
		@Point5_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point5_EffortDescription, ''),
		@Point6_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point6_EffortDescription, ''),
		@Point7_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point7_EffortDescription, ''),
		@Point8_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point8_EffortDescription, ''),
		@Point9_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point9_EffortDescription, ''),
		@Point10_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point10_EffortDescription, ''),
		@Point11_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point11_EffortDescription, ''),
		@Point12_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point12_EffortDescription, '')
	 FROM 
		EngMat_Enrolment_InYear 
				INNER JOIN OGP_Enrolment  ON OGP_Enrolment.StudentRef = EngMat_Enrolment_InYear.StudentRef AND 
				                             OGP_Enrolment.AcademicYearID = EngMat_Enrolment_InYear.AcademicYearID AND
											 OGP_Enrolment.CourseID = EngMat_Enrolment_InYear.CourseID

		--	INNER JOIN EngMatEnrolment ON
		--		EngMatEnrolment.EngMatStudentID = EngMat_Enrolment_InYear.EngMatStudentID AND 
		--		EngMatEnrolment.CourseID = EngMat_Enrolment_InYear.CourseID
	 WHERE 
		EngMat_Enrolment_InYear.ID = @ID; 


	-- ***********************************************************
	--  Get the EffortGrade Description from the ID
	-- ***********************************************************
	SELECT @Point1_EffortDescription_New = '';
	SELECT @Point2_EffortDescription_New = '';
	SELECT @Point3_EffortDescription_New = '';
	SELECT @Point4_EffortDescription_New = '';
	SELECT @Point5_EffortDescription_New = '';
	SELECT @Point6_EffortDescription_New = '';
	SELECT @Point7_EffortDescription_New = '';
	SELECT @Point8_EffortDescription_New = '';
	SELECT @Point9_EffortDescription_New = '';
	SELECT @Point10_EffortDescription_New = '';
	SELECT @Point11_EffortDescription_New = '';
	SELECT @Point12_EffortDescription_New = '';

	SELECT @Point1_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point1_EffortID, 0);
	SELECT @Point2_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point2_EffortID, 0);
	SELECT @Point3_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point3_EffortID, 0);
	SELECT @Point4_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point4_EffortID, 0);
	SELECT @Point5_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point5_EffortID, 0);
	SELECT @Point6_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point6_EffortID, 0);
	SELECT @Point7_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point7_EffortID, 0);
	SELECT @Point8_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point8_EffortID, 0);
	SELECT @Point9_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point9_EffortID, 0);
	SELECT @Point10_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point10_EffortID, 0);
	SELECT @Point11_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point11_EffortID, 0);
	SELECT @Point12_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point12_EffortID, 0);


	-- ***********************************************************
	--  Get the Staff Username
	-- SELECT @UserName = StaffCode FROM Staff WHERE StaffID = @StaffId;
	-- ***********************************************************
	SELECT 
		@UserName = [User].UserName,
		@UserForenames = [User].Forenames,
		@UserSurname = [User].Surname
	FROM Staff 
		INNER JOIN [User] ON [User].UserID = Staff.UserID
	WHERE 
	    StaffID = @StaffId;


	-- ***********************************************************
	--  Always update the Start Grade (if set to something)
	-- ***********************************************************
	IF @StartGrade IS NOT NULL
	BEGIN
		SET @StartGradeGrade = @StartGrade;
	END


	-- ***********************************************************
	--  Set the Other StartGrade values based on the parameters
	-- ***********************************************************
	IF @IsStartGradeChanged = 1
	BEGIN
		SET @StartGradeUserName = (@UserForenames + ' ' + @UserSurname);
		SET @StartGradeDateTime = GETDATE();
		SET @StartGradePoints = @StartPoints;
	END


	-- ***********************************************************
	--  Create the EngMatInYearGrade record if it doesnt exist
	-- ***********************************************************
	SELECT 
		@InYearGradeID = EngMatInYearGrade.ID 
	FROM 
		EngMatInYearGrade 
	WHERE 
		AcademicYearID  = @AcademicYearID    AND 
		CourseID        = @OriginalCourseID  AND
		EngMatStudentID = @StudentID;

	IF @InYearGradeID IS NULL
	BEGIN
		INSERT INTO EngMatInYearGrade 
			(AcademicYearID, EngMatStudentID, CourseID, 
			 Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
			 Point1_Grade_Updated, Point2_Grade_Updated, Point3_Grade_Updated, Point4_Grade_Updated, Point5_Grade_Updated, Point6_Grade_Updated, Point7_Grade_Updated, Point8_Grade_Updated, Point9_Grade_Updated, Point10_Grade_Updated, Point11_Grade_Updated, Point12_Grade_Updated, 
			 PersonalTargetGrade,
			 Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, 
			 LearningAimRef,
			 Point1_EffortID, Point2_EffortID, Point3_EffortID, Point4_EffortID, Point5_EffortID, Point6_EffortID, Point7_EffortID, Point8_EffortID, Point9_EffortID, Point10_EffortID, Point11_EffortID, Point12_EffortID,
			 OGHighestPreviousGCSEGrade, OGHighestPreviousGCSEPoints, OGHighestPreviousGCSEGradeSavedBy, OGHighestPreviousGCSEGradeSavedWhen 
			 ) 
		VALUES 
			(
				--Note: we write the Orig Course ID
				@AcademicYearID, @StudentID, @OriginalCourseID,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
				@PersonalTargetGrade,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				@LearningAimRef,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				NULL, NULL, NULL, NULL
			);
		
		--get the new ID
		SELECT @InYearGradeID = SCOPE_IDENTITY();
	END

	-- ***********************************************************
	--  Update the EngMatInYearGrade table
	-- ***********************************************************
	UPDATE 
		EngMatInYearGrade
	SET 
		PersonalTargetGrade = (IIF(@PersonalTargetGrade = '', Null, @PersonalTargetGrade)),
		LearningAimRef = @LearningAimRef,

		Point1_Grade = (IIF(@Point1_Grade = '', Null, @Point1_Grade)),
		Point2_Grade = (IIF(@Point2_Grade = '', Null, @Point2_Grade)),
		Point3_Grade = (IIF(@Point3_Grade = '', Null, @Point3_Grade)),
		Point4_Grade = (IIF(@Point4_Grade = '', Null, @Point4_Grade)),
		Point5_Grade = (IIF(@Point5_Grade = '', Null, @Point5_Grade)),
		Point6_Grade = (IIF(@Point6_Grade = '', Null, @Point6_Grade)),
		Point7_Grade = (IIF(@Point7_Grade = '', Null, @Point7_Grade)),
		Point8_Grade = (IIF(@Point8_Grade = '', Null, @Point8_Grade)),
		Point9_Grade = (IIF(@Point9_Grade = '', Null, @Point9_Grade)),
		Point10_Grade = (IIF(@Point10_Grade = '', Null, @Point10_Grade)),
		Point11_Grade = (IIF(@Point11_Grade = '', Null, @Point11_Grade)),
		Point12_Grade = (IIF(@Point12_Grade = '', Null, @Point12_Grade)),

		Point1_Grade_Updated = (CASE WHEN @Point1_Grade_Existing = @Point1_Grade THEN 0 ELSE 1 END),
		Point2_Grade_Updated = (CASE WHEN @Point2_Grade_Existing = @Point2_Grade THEN 0 ELSE 1 END),
		Point3_Grade_Updated = (CASE WHEN @Point3_Grade_Existing = @Point3_Grade THEN 0 ELSE 1 END),
		Point4_Grade_Updated = (CASE WHEN @Point4_Grade_Existing = @Point4_Grade THEN 0 ELSE 1 END),
		Point5_Grade_Updated = (CASE WHEN @Point5_Grade_Existing = @Point5_Grade THEN 0 ELSE 1 END),
		Point6_Grade_Updated = (CASE WHEN @Point6_Grade_Existing = @Point6_Grade THEN 0 ELSE 1 END),
		Point7_Grade_Updated = (CASE WHEN @Point7_Grade_Existing = @Point7_Grade THEN 0 ELSE 1 END),
		Point8_Grade_Updated = (CASE WHEN @Point8_Grade_Existing = @Point8_Grade THEN 0 ELSE 1 END),
		Point9_Grade_Updated = (CASE WHEN @Point9_Grade_Existing = @Point9_Grade THEN 0 ELSE 1 END),
		Point10_Grade_Updated = (CASE WHEN @Point10_Grade_Existing = @Point10_Grade THEN 0 ELSE 1 END),
		Point11_Grade_Updated = (CASE WHEN @Point11_Grade_Existing = @Point11_Grade THEN 0 ELSE 1 END),
		Point12_Grade_Updated = (CASE WHEN @Point12_Grade_Existing = @Point12_Grade THEN 0 ELSE 1 END),

		Point1_Notes = (IIF(@Point1_Notes = '', Null, @Point1_Notes)),
		Point2_Notes = (IIF(@Point2_Notes = '', Null, @Point2_Notes)),
		Point3_Notes = (IIF(@Point3_Notes = '', Null, @Point3_Notes)),
		Point4_Notes = (IIF(@Point4_Notes = '', Null, @Point4_Notes)),
		Point5_Notes = (IIF(@Point5_Notes = '', Null, @Point5_Notes)),
		Point6_Notes = (IIF(@Point6_Notes = '', Null, @Point6_Notes)),
		Point7_Notes = (IIF(@Point7_Notes = '', Null, @Point7_Notes)),
		Point8_Notes = (IIF(@Point8_Notes = '', Null, @Point8_Notes)),
		Point9_Notes = (IIF(@Point9_Notes = '', Null, @Point9_Notes)),
		Point10_Notes = (IIF(@Point10_Notes = '', Null, @Point10_Notes)),
		Point11_Notes = (IIF(@Point11_Notes = '', Null, @Point11_Notes)),
		Point12_Notes = (IIF(@Point12_Notes = '', Null, @Point12_Notes)),

		Point1_EffortID = (IIF(@Point1_EffortID <= 0, Null, @Point1_EffortID)),
		Point2_EffortID = (IIF(@Point2_EffortID <= 0, Null, @Point2_EffortID)),
		Point3_EffortID = (IIF(@Point3_EffortID <= 0, Null, @Point3_EffortID)),
		Point4_EffortID = (IIF(@Point4_EffortID <= 0, Null, @Point4_EffortID)),
		Point5_EffortID = (IIF(@Point5_EffortID <= 0, Null, @Point5_EffortID)),
		Point6_EffortID = (IIF(@Point6_EffortID <= 0, Null, @Point6_EffortID)),
		Point7_EffortID = (IIF(@Point7_EffortID <= 0, Null, @Point7_EffortID)),
		Point8_EffortID = (IIF(@Point8_EffortID <= 0, Null, @Point8_EffortID)),
		Point9_EffortID = (IIF(@Point9_EffortID <= 0, Null, @Point9_EffortID)),
		Point10_EffortID = (IIF(@Point10_EffortID <= 0, Null, @Point10_EffortID)),
		Point11_EffortID = (IIF(@Point11_EffortID <= 0, Null, @Point11_EffortID)),
		Point12_EffortID = (IIF(@Point12_EffortID <= 0, Null, @Point12_EffortID)),

		OGHighestPreviousGCSEGrade = @StartGradeGrade, 
		OGHighestPreviousGCSEPoints = @StartGradePoints, 
		OGHighestPreviousGCSEGradeSavedBy =  @StartGradeUserName,    
		OGHighestPreviousGCSEGradeSavedWhen  = @StartGradeDateTime
	WHERE
		ID = @InYearGradeID;


	-- ***********************************************************
	--  Populate EnrolmentWebSave
	-- ***********************************************************
	DELETE FROM EngMatEnrolmentWebSave WHERE EngMatEnrolmentID = @EnrolmentID AND UserName = @UserName;
	INSERT INTO EngMatEnrolmentWebSave (EngMatEnrolmentID, UserName) VALUES (@EnrolmentID, @UserName);


	-- ***********************************************************
	--  Regenerate the EngMat data 
	--  We now do this separately to speed up the whole process i.e. when multiple Student changes
	-- ***********************************************************
	--EXEC sp_EngMat_Populate_Summary_Tables @EngMatType, 1, @UserName


	-- ***********************************************************
	--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
	-- ***********************************************************
	SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);


	-- ***********************************************************
	--  Create Audit entries for the changed Grade fields
	-- ***********************************************************
	IF @Point1_Grade != @Point1_Grade_Existing BEGIN
	    IF IsNull(@Point1_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_Grade', null, null, @Point1_Grade_Existing, @Point1_Grade)
	END
	IF @Point2_Grade != @Point2_Grade_Existing BEGIN
	    IF IsNull(@Point2_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_Grade', null, null, @Point2_Grade_Existing, @Point2_Grade)
	END
	IF @Point3_Grade != @Point3_Grade_Existing BEGIN
	    IF IsNull(@Point3_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_Grade', null, null, @Point3_Grade_Existing, @Point3_Grade)
	END
	IF @Point4_Grade != @Point4_Grade_Existing BEGIN
	    IF IsNull(@Point4_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_Grade', null, null, @Point4_Grade_Existing, @Point4_Grade)
	END
	IF @Point5_Grade != @Point5_Grade_Existing BEGIN
	    IF IsNull(@Point5_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_Grade', null, null, @Point5_Grade_Existing, @Point5_Grade)
	END
	IF @Point6_Grade != @Point6_Grade_Existing BEGIN
	    IF IsNull(@Point6_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_Grade', null, null, @Point6_Grade_Existing, @Point6_Grade)
	END
	IF @Point7_Grade != @Point7_Grade_Existing BEGIN
	    IF IsNull(@Point7_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_Grade', null, null, @Point7_Grade_Existing, @Point7_Grade)
	END
	IF @Point8_Grade != @Point8_Grade_Existing BEGIN
	    IF IsNull(@Point8_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_Grade', null, null, @Point8_Grade_Existing, @Point8_Grade)
	END
	IF @Point9_Grade != @Point9_Grade_Existing BEGIN
	    IF IsNull(@Point9_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_Grade', null, null, @Point9_Grade_Existing, @Point9_Grade)
	END
	IF @Point10_Grade != @Point10_Grade_Existing BEGIN
	    IF IsNull(@Point10_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_Grade', null, null, @Point10_Grade_Existing, @Point10_Grade)
	END
	IF @Point11_Grade != @Point11_Grade_Existing BEGIN
	    IF IsNull(@Point11_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_Grade', null, null, @Point11_Grade_Existing, @Point11_Grade)
	END
	IF @Point12_Grade != @Point12_Grade_Existing BEGIN
	    IF IsNull(@Point12_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_Grade', null, null, @Point12_Grade_Existing, @Point12_Grade)
	END


	-- ***********************************************************
	--   Create Audit entries for the changed Notes fields
	-- ***********************************************************
	IF @Point1_Notes != @Point1_Notes_Existing BEGIN
	    IF IsNull(@Point1_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_Notes', null, null, @Point1_Notes_Existing, @Point1_Notes)
	END
	IF @Point2_Notes != @Point2_Notes_Existing BEGIN
	    IF IsNull(@Point2_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_Notes', null, null, @Point2_Notes_Existing, @Point2_Notes)
	END
	IF @Point3_Notes != @Point3_Notes_Existing BEGIN
	    IF IsNull(@Point3_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_Notes', null, null, @Point3_Notes_Existing, @Point3_Notes)
	END
	IF @Point4_Notes != @Point4_Notes_Existing BEGIN
	    IF IsNull(@Point4_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_Notes', null, null, @Point4_Notes_Existing, @Point4_Notes)
	END
	IF @Point5_Notes != @Point5_Notes_Existing BEGIN
	    IF IsNull(@Point5_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_Notes', null, null, @Point5_Notes_Existing, @Point5_Notes)
	END
	IF @Point6_Notes != @Point6_Notes_Existing BEGIN
	    IF IsNull(@Point6_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_Notes', null, null, @Point6_Notes_Existing, @Point6_Notes)
	END
	IF @Point7_Notes != @Point7_Notes_Existing BEGIN
	    IF IsNull(@Point7_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_Notes', null, null, @Point7_Notes_Existing, @Point7_Notes)
	END
	IF @Point8_Notes != @Point8_Notes_Existing BEGIN
	    IF IsNull(@Point8_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_Notes', null, null, @Point8_Notes_Existing, @Point8_Notes)
	END
	IF @Point9_Notes != @Point9_Notes_Existing BEGIN
	    IF IsNull(@Point9_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_Notes', null, null, @Point9_Notes_Existing, @Point9_Notes)
	END
	IF @Point10_Notes != @Point10_Notes_Existing BEGIN
	    IF IsNull(@Point10_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_Notes', null, null, @Point10_Notes_Existing, @Point10_Notes)
	END
	IF @Point11_Notes != @Point11_Notes_Existing BEGIN
	    IF IsNull(@Point11_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_Notes', null, null, @Point11_Notes_Existing, @Point11_Notes)
	END
	IF @Point12_Notes != @Point12_Notes_Existing BEGIN
	    IF IsNull(@Point12_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_Notes', null, null, @Point12_Notes_Existing, @Point12_Notes)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed EffortGrade fields
	-- ***********************************************************
	IF @Point1_EffortDescription_New != @Point1_EffortDescription_Existing BEGIN
	    IF IsNull(@Point1_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_EffortID', null, null, @Point1_EffortDescription_Existing, @Point1_EffortDescription_New)
	END
	IF @Point2_EffortDescription_New != @Point2_EffortDescription_Existing BEGIN
	    IF IsNull(@Point2_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_EffortID', null, null, @Point2_EffortDescription_Existing, @Point2_EffortDescription_New)
	END
	IF @Point3_EffortDescription_New != @Point3_EffortDescription_Existing BEGIN
	    IF IsNull(@Point3_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_EffortID', null, null, @Point3_EffortDescription_Existing, @Point3_EffortDescription_New)
	END
	IF @Point4_EffortDescription_New != @Point4_EffortDescription_Existing BEGIN
	    IF IsNull(@Point4_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_EffortID', null, null, @Point4_EffortDescription_Existing, @Point4_EffortDescription_New)
	END
	IF @Point5_EffortDescription_New != @Point5_EffortDescription_Existing BEGIN
	    IF IsNull(@Point5_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_EffortID', null, null, @Point5_EffortDescription_Existing, @Point5_EffortDescription_New)
	END
	IF @Point6_EffortDescription_New != @Point6_EffortDescription_Existing BEGIN
	    IF IsNull(@Point6_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_EffortID', null, null, @Point6_EffortDescription_Existing, @Point6_EffortDescription_New)
	END
	IF @Point7_EffortDescription_New != @Point7_EffortDescription_Existing BEGIN
	    IF IsNull(@Point7_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_EffortID', null, null, @Point7_EffortDescription_Existing, @Point7_EffortDescription_New)
	END
	IF @Point8_EffortDescription_New != @Point8_EffortDescription_Existing BEGIN
	    IF IsNull(@Point8_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_EffortID', null, null, @Point8_EffortDescription_Existing, @Point8_EffortDescription_New)
	END
	IF @Point9_EffortDescription_New != @Point9_EffortDescription_Existing BEGIN
	    IF IsNull(@Point9_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_EffortID', null, null, @Point9_EffortDescription_Existing, @Point9_EffortDescription_New)
	END
	IF @Point10_EffortDescription_New != @Point10_EffortDescription_Existing BEGIN
	    IF IsNull(@Point10_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_EffortID', null, null, @Point10_EffortDescription_Existing, @Point10_EffortDescription_New)
	END
	IF @Point11_EffortDescription_New != @Point11_EffortDescription_Existing BEGIN
	    IF IsNull(@Point11_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_EffortID', null, null, @Point11_EffortDescription_Existing, @Point11_EffortDescription_New)
	END
	IF @Point12_EffortDescription_New != @Point12_EffortDescription_Existing BEGIN
	    IF IsNull(@Point12_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_EffortID', null, null, @Point12_EffortDescription_Existing, @Point12_EffortDescription_New)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed PersonalTargetGrade fields
	-- ***********************************************************
	IF @PersonalTargetGrade != @PersonalTargetGrade_Existing BEGIN
	    IF IsNull(@PersonalTargetGrade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'PersonalTargetGrade', null, null, @PersonalTargetGrade_Existing, @PersonalTargetGrade)
	END	


	-- ***********************************************************
	--  Return 1 for success
	-- ***********************************************************
	SELECT 1;

END
ELSE
BEGIN
    --ID doesnt exist so return -1
	SELECT -1;
END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy]    Script Date: 02/05/2024 11:07:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy] AS' 
END
GO



ALTER PROCEDURE [dbo].[sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy]
  @AcademicYearID       AS VARCHAR(5),           -- Target Year:
  @Action               AS VARCHAR(25),          -- Action Values: COUNT_WITH or COUNT_WITHOUT or COUNT_WITH_AND_WITHOUT or COURSE_COUNTS or PERFORM_COPY
  @SourceAcademicYearID AS VARCHAR(5) = Null     -- Source Year:   only required for PERFORM_COPY
AS
-- ===============================================================
-- Author:		Andrew Breward
-- Create date: AndyB 05/04/2024
-- Descripton:	SP to handle the DataRollover SkillsCourseQuestions 
-- Example:     exec sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy '23/24', 'COUNT_WITHOUT'
--              exec sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy '23/24', 'COUNT_WITH'
--              exec sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy '23/24', 'COUNT_WITH_AND_WITHOUT'
--              exec sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy '23/24', 'COURSE_COUNTS'
--              exec sp_WebPlus_DataRollover_SKillsCourseQuestions_Copy '23/24', 'PERFORM_COPY', '22/23'
-- ===============================================================

DECLARE @rowsInserted      INT;
DECLARE @copyCounter       INT = 0;
DECLARE @copyCourseID      INT;
DECLARE @copyCourseCode    VARCHAR(50);
DECLARE @targetCourseID      INT;
DECLARE @targetQuestionCount INT;

--WAITFOR DELAY '00:00:05'

PRINT '=======================';
PRINT CONCAT('Action: ', @Action);
PRINT '=======================';


IF @Action = 'COUNT_WITHOUT' 
BEGIN
	SELECT 
		Count(Course.ID) AS NumberOfCoursesWithoutQuestions
	FROM 
		Course
	WHERE 
		AcademicYearID = @AcademicYearID AND 
		coursecode != 'n/a' AND
		NOT EXISTS
			(SELECT 1 FROM SkillsCourseQuestion scq WHERE scq.CourseID = Course.ID AND scq.IsObsolete = 0)

END
ELSE IF @Action = 'COUNT_WITH'
BEGIN
	SELECT 
		Count(Course.ID) AS NumberOfCoursesWithQuestions
	FROM 
		Course
	WHERE 
		AcademicYearID = @AcademicYearID AND 
		coursecode != 'n/a' AND
		EXISTS
			(SELECT 1 FROM SkillsCourseQuestion scq WHERE scq.CourseID = Course.ID AND scq.IsObsolete = 0)

END
ELSE IF @Action = 'COUNT_WITH_AND_WITHOUT'
BEGIN
	SELECT (
		SELECT Count(Course.ID) 
	FROM 
		Course
	WHERE 
		AcademicYearID = @AcademicYearID AND 
		coursecode != 'n/a' AND
		EXISTS
			(SELECT 1 FROM SkillsCourseQuestion scq WHERE scq.CourseID = Course.ID AND scq.IsObsolete = 0)
	) AS NumberOfCoursesWithQuestions
	,
	(
		SELECT Count(Course.ID) 
	FROM 
		Course
	WHERE 
		AcademicYearID = @AcademicYearID AND 
		coursecode != 'n/a' AND
		NOT EXISTS
			(SELECT 1 FROM SkillsCourseQuestion scq WHERE scq.CourseID = Course.ID AND scq.IsObsolete = 0)
	) AS NumberOfCoursesWithoutQuestions

END
ELSE IF @Action = 'COURSE_COUNTS'
BEGIN
	SELECT 
		Course.ID, 
		Count(scq.ID) AS CourseQuestionCount
	FROM Course
		LEFT JOIN SkillsCourseQuestion scq
			ON Course.ID = scq.CourseID
	WHERE 
		AcademicYearID = @AcademicYearID AND 
		coursecode != 'n/a' AND
		scq.IsObsolete = 0
	GROUP BY 
		Course.ID
	HAVING 
		Count(scq.ID) > 0;

END
ELSE IF @Action = 'PERFORM_COPY'
BEGIN
	IF @SourceAcademicYearID IS Null
	BEGIN
		PRINT CONCAT('Error: ', 'Missing SourceAcademicYearID');
		SELECT -1 AS ReturnCode;
	END
	ELSE IF @AcademicYearID = @SourceAcademicYearID
	BEGIN
		PRINT CONCAT('Error: ', 'AcademicYearID cannot be the same as SourceAcademicYearID');
		SELECT -2 AS ReturnCode;
	END
	ELSE
	BEGIN
		--Cursor to Select the Source Courses
		DECLARE cursor_copy_courses CURSOR FOR
			SELECT DISTINCT 
				Course.ID, Course.CourseCode 
			FROM 
				SkillsCourseQuestion scq
			INNER JOIN 
				Course ON Course.ID = scq.CourseID
			WHERE 
				Course.AcademicYearID = @SourceAcademicYearID AND 
				Course.CourseCode != 'n/a' AND
				scq.IsObsolete = 0

			--SELECT 
			--	Course.ID, Course.CourseCode
			--FROM 
			--	Course
			--WHERE 
			--	AcademicYearID = @SourceAcademicYearID AND 
			--	coursecode != 'n/a' AND
			--	EXISTS
			--		(SELECT 1 FROM SkillsCourseQuestion scq WHERE scq.CourseID = Course.ID AND scq.IsObsolete = 0);

		--Loop thru the Courses with Questions	to CopyFrom
		OPEN cursor_copy_courses;
		FETCH NEXT FROM cursor_copy_courses INTO @copyCourseID, @copyCourseCode;
		WHILE @@FETCH_STATUS = 0
	    BEGIN
			--Check if the Course exists in the Target Year
			SET @targetCourseID = 
				(SELECT Course.ID FROM Course WHERE AcademicYearID = @AcademicYearID AND CourseCode = @copyCourseCode);
			IF IsNull(@targetCourseID, 0) > 0 
			BEGIN
				--PRINT CONCAT('Found CourseCode: ', @copyCourseCode);

				--Ignore if the Target Course already has Questions
				SET @targetQuestionCount = 
					(SELECT Count(1) FROM SkillsCourseQuestion scq WHERE scq.CourseID = @targetCourseID AND scq.IsObsolete = 0);
				IF IsNull(@targetQuestionCount, 0) > 0
				BEGIN
					PRINT CONCAT('CourseCode: ', @copyCourseCode, ' - Not Copying (Course already has ', @targetQuestionCount, ' questions)');
				END
				ELSE
				BEGIN
					--Copy the Source Course's (non-obsolete) Questions
					INSERT INTO SkillsCourseQuestion 
						(SkillsAnswerTypeID, CourseID, Description, OrderBy, IsObsolete)
					SELECT 
						SkillsAnswerTypeID, @targetCourseID, Description, OrderBy, IsObsolete  
					FROM  
						SkillsCourseQuestion 
					WHERE 
						CourseID = @copyCourseID AND 
						IsObsolete = 0;

					--get the number of records Inserted					
					SELECT @rowsInserted = @@ROWCOUNT;

					PRINT CONCAT('CourseCode: ', @copyCourseCode, ' - Copied ', @rowsInserted, ' Questions');

					SET @copyCounter = @copyCounter + 1;
				END
			END
			ELSE
			BEGIN
				PRINT CONCAT('Missing CourseCode: ', @copyCourseCode);
			END
		
			FETCH NEXT FROM cursor_copy_courses INTO @copyCourseID, @copyCourseCode;
		END;
 
		-- close and deallocate cursor
		CLOSE cursor_copy_courses;
		DEALLOCATE cursor_copy_courses;

		PRINT '========================================';
		PRINT CONCAT('Finished: ', @Action, '  ', @copyCounter, ' Courses Copied');
		PRINT '========================================';

		SELECT @copyCounter AS ReturnCode;
	END

END
ELSE
BEGIN
	PRINT CONCAT('Error: ', 'Invalid Action');
	SELECT -3 AS ReturnCode;
END
GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CrossCollegeQu]    Script Date: 02/05/2024 11:07:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CrossCollegeQu]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CrossCollegeQu] AS' 
END
GO



ALTER PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CrossCollegeQu]
@CourseID INT
AS

-- =============================================
-- Author:		Andrew Genner
-- Create date: 15/03/2024
-- Descripton:	Shows Cross-College Questions that have been answered and shows the average score per period for each.
-- =============================================

--exec sp_WebPlus_Skills_Reporting_ByCourse_CrossCollegeQu 2790
--Get the basic data into a table
SELECT
	SkillsPeriod.DefaultDescription AS [Period],
	SkillsQuestion.[Description] AS Question,
	CASE WHEN Count(SkillsAnswer.[Value]) IS NULL THEN NULL ELSE
		CAST(CAST((Sum(SkillsAnswer.[Value])) AS decimal(19,2)) / (Count(SkillsAnswer.[Value])) AS decimal(19,2)) 
	END AS AvgAnswerValue,
	SkillsQuestion.OrderBy
INTO
	#TempAnswerAvgPerQuPerPeriod
FROM 
	SkillsStudentAnswer 
		INNER JOIN SkillsAnswer ON SkillsStudentAnswer.SkillsAnswerID = SkillsAnswer.ID
		INNER JOIN SkillsQuestion ON SkillsStudentAnswer.SkillsQuestionID = SkillsQuestion.ID
		INNER JOIN SkillsPeriod ON SkillsStudentAnswer.SkillsPeriodID = SkillsPeriod.ID 
		INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = SkillsStudentAnswer.OGP_StudentID
WHERE 
	OGP_Enrolment.CourseID = @CourseID
	AND OGP_Enrolment.RecordStatus <> 'Obsolete'
GROUP BY 
	SkillsPeriod.DefaultDescription,
	SkillsQuestion.[Description],
	SkillsQuestion.OrderBy

UNION SELECT
	SkillsPeriod.DefaultDescription AS [Period],
	'Overall Average' AS Question,
	CASE WHEN Count(SkillsAnswer.[Value]) IS NULL THEN NULL ELSE
		CAST(CAST((Sum(SkillsAnswer.[Value])) AS decimal(19,2)) / (Count(SkillsAnswer.[Value])) AS decimal(19,2)) 
	END AS AvgAnswerValue,
	999999 As OrderBy

FROM 
	SkillsStudentAnswer 
		INNER JOIN SkillsAnswer ON SkillsStudentAnswer.SkillsAnswerID = SkillsAnswer.ID
		INNER JOIN SkillsQuestion ON SkillsStudentAnswer.SkillsQuestionID = SkillsQuestion.ID
		INNER JOIN SkillsPeriod ON SkillsStudentAnswer.SkillsPeriodID = SkillsPeriod.ID 
		INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = SkillsStudentAnswer.OGP_StudentID
WHERE 
	OGP_Enrolment.CourseID = @CourseID

GROUP BY 
	SkillsPeriod.DefaultDescription


SELECT 
	Question,
	[Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10]

FROM  
	(
		SELECT Question, OrderBy, [Period], AvgAnswerValue
		FROM #TempAnswerAvgPerQuPerPeriod
	) AS sourcetable
	PIVOT  
	(  
	  MAX(AvgAnswerValue)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR [Period] IN ([Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10])
	) AS PivotTable

ORDER BY
	OrderBy ASC



GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CourseQu]    Script Date: 02/05/2024 11:07:49 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CourseQu]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CourseQu] AS' 
END
GO



ALTER PROCEDURE [dbo].[sp_WebPlus_Skills_Reporting_ByCourse_CourseQu]
@CourseID INT
AS

-- =============================================
-- Author:		Andrew Genner
-- Create date: 15/03/2024
-- Descripton:	Shows Course Questions that have been answered and shows the average score per period for each.
-- =============================================

--exec sp_WebPlus_Skills_Reporting_ByCourse_CourseQu 2790

--Get the basic data into a table
SELECT
	SkillsPeriod.DefaultDescription AS [Period],
	SkillsCourseQuestion.[Description] AS Question,
	CASE WHEN Count(SkillsAnswer.[Value]) IS NULL THEN NULL ELSE
		CAST(CAST((Sum(SkillsAnswer.[Value])) AS decimal(19,2)) / (Count(SkillsAnswer.[Value])) AS decimal(19,2)) 
	END AS AvgAnswerValue,
	SkillsCourseQuestion.OrderBy
INTO
	#TempAnswerAvgPerQuPerPeriod
FROM 
	SkillsCourseStudentAnswer 
		INNER JOIN SkillsAnswer ON SkillsCourseStudentAnswer.SkillsAnswerID = SkillsAnswer.ID
		INNER JOIN SkillsCourseQuestion ON SkillsCourseStudentAnswer.SkillsCourseQuestionID = SkillsCourseQuestion.ID
		INNER JOIN SkillsPeriod ON SkillsCourseStudentAnswer.SkillsPeriodID = SkillsPeriod.ID 
WHERE 
	SkillsCourseStudentAnswer.CourseID = @CourseID
GROUP BY 
	SkillsPeriod.DefaultDescription,
	SkillsCourseQuestion.[Description],
	SkillsCourseQuestion.OrderBy

UNION SELECT
	SkillsPeriod.DefaultDescription AS [Period],
	'Overall Average' AS Question,
	CASE WHEN Count(SkillsAnswer.[Value]) IS NULL THEN NULL ELSE
		CAST(CAST((Sum(SkillsAnswer.[Value])) AS decimal(19,2)) / (Count(SkillsAnswer.[Value])) AS decimal(19,2)) 
	END AS AvgAnswerValue,
	999999 As OrderBy

FROM 
	SkillsCourseStudentAnswer 
		INNER JOIN SkillsAnswer ON SkillsCourseStudentAnswer.SkillsAnswerID = SkillsAnswer.ID
		INNER JOIN SkillsCourseQuestion ON SkillsCourseStudentAnswer.SkillsCourseQuestionID = SkillsCourseQuestion.ID
		INNER JOIN SkillsPeriod ON SkillsCourseStudentAnswer.SkillsPeriodID = SkillsPeriod.ID 
WHERE 
	SkillsCourseStudentAnswer.CourseID = @CourseID

GROUP BY 
	SkillsPeriod.DefaultDescription


SELECT 
	Question,
	[Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10]

FROM  
	(
		SELECT Question, OrderBy, [Period], AvgAnswerValue
		FROM #TempAnswerAvgPerQuPerPeriod
	) AS sourcetable
	PIVOT  
	(  
	  MAX(AvgAnswerValue)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR [Period] IN ([Period01], [Period02], [Period03], [Period04], [Period05], [Period06], [Period07], [Period08], [Period09], [Period10])
	) AS PivotTable

ORDER BY
	OrderBy ASC

/*

--DECLARE @AcademicYearID AS VARCHAR(5)
--SELECT @AcademicYearID = (SELECT AcademicYearID FROM Course WHERE ID = @CourseID)

--This is a dynamic pivot because we don't know how many Columns (Periods) we will have...

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX),
@PivotColumnNames AS NVARCHAR(MAX),
@PivotSelectColumnNames AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column
SELECT @PivotColumnNames= ISNULL(@PivotColumnNames + ',','')
+ '[' + [Period] + ']'
FROM (SELECT DefaultDescription AS [Period] FROM SkillsPeriod WHERE AcademicYearID = @AcademicYearID AND LEN(SkillsPeriodDescription) > 0) AS [Period]


--Get SELECT distinct values of the PIVOT Column
SELECT @PivotSelectColumnNames 
= ISNULL(@PivotSelectColumnNames + ',','')
+ '' + '[' + [Period] + ']' + ' AS '
+ '[' + [Period] + ']'
FROM (SELECT DefaultDescription AS [Period] FROM SkillsPeriod WHERE AcademicYearID = @AcademicYearID AND LEN(SkillsPeriodDescription) > 0) AS [Period]


--Prepare the PIVOT using dynamic query
SET @DynamicPivotQuery = 
N'SELECT Question, ' + @PivotSelectColumnNames + '
FROM #TempAnswerAvgPerQuPerPeriod
pivot(sum(AvgAnswerValue) for [Period] in (' + @PivotColumnNames + ')) as pvt'

--Execute the Dynamic Pivot Query
EXEC (@DynamicPivotQuery)


*/



GO

/****** Object:  StoredProcedure [dbo].[sp_OBSOLETE_WebPlus_Skills_Reporting_ByCourse_Select]    Script Date: 02/05/2024 11:07:50 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_OBSOLETE_WebPlus_Skills_Reporting_ByCourse_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_OBSOLETE_WebPlus_Skills_Reporting_ByCourse_Select] AS' 
END
GO


ALTER PROCEDURE [dbo].[sp_OBSOLETE_WebPlus_Skills_Reporting_ByCourse_Select]
  @AcademicYearID   AS VARCHAR(5)
AS
-- =============================================
-- Author:		Andrew Genner
-- Create date: 20/03/2024 
--
-- Descripton:	SP to retrieve the Skills Report Data.
-- The DataSource for the main reporting page in OneGradePlus for Skills
-- We need to calculate the starting point and the MostRecentPoint
-- So if a student starts in period 3, that is their starting point - we can then calculate the difference between the start and end point.
-- Shows the Course Answers for the Course and the Overall Student Answers.
--
-- Examples:    exec sp_WebPlus_Skills_Reporting_ByCourse_Select '23/24'
--
-- =============================================

--Now, (for Student Cross College) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)

AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)

AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsStudentOnlyAnswerAvg_Latestsub
FROM vSkillsStudentOnlyAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--Now, (for Course) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
CourseID,
CourseCode,
AcademicYearID,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE  Period10 END)
									ELSE  Period09 END)
								ELSE  Period08 END)
							ELSE  Period07 END) 
						ELSE  Period06 END)
					ELSE  Period05 END)
				ELSE  Period04 END)
			ELSE  Period03 END)
		ELSE  Period02 END)				
	ELSE  Period01 END)
 AS StartingValue,

	(CASE WHEN  Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN 
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod, 
 
  	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
 					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 10 END)
AS MostRecentPeriod
INTO #TempvSkillsCourseStudentOnlyAnswerAvg_Latestsub
FROM vSkillsCourseStudentOnlyAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID

--Now, (for Overall) we need to find the Most Recent Period and the StartingValue and the Latest Value.
SELECT
OGP_StudentID,
	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN Period02 IS NULL THEN
			(CASE WHEN Period03 IS NULL THEN
				(CASE WHEN Period04 IS NULL THEN
					(CASE WHEN Period05 IS NULL THEN
						(CASE WHEN Period06 IS NULL THEN
							(CASE WHEN Period07 IS NULL THEN
								(CASE WHEN Period08 IS NULL THEN
									(CASE WHEN Period09 IS NULL THEN
										(CASE WHEN Period10 IS NULL THEN
										NULL
										ELSE Period10 END)
									ELSE Period09 END)
								ELSE Period08 END)
							ELSE Period07 END) 
						ELSE Period06 END)
					ELSE Period05 END)
				ELSE Period04 END)
			ELSE Period03 END)
		ELSE Period02 END)
	ELSE Period01 END)
AS StartingPeriodValue,

	(CASE WHEN Period01 IS NULL THEN
		(CASE WHEN  Period02 IS NULL THEN
			(CASE WHEN  Period03 IS NULL THEN
				(CASE WHEN  Period04 IS NULL THEN
					(CASE WHEN  Period05 IS NULL THEN
						(CASE WHEN  Period06 IS NULL THEN
							(CASE WHEN  Period07 IS NULL THEN
								(CASE WHEN  Period08 IS NULL THEN
									(CASE WHEN  Period09 IS NULL THEN
										(CASE WHEN  Period10 IS NULL THEN
										NULL
										ELSE 10 END)
									ELSE 9 END)
								ELSE 8 END)
							ELSE 7 END) 
						ELSE 6 END)
					ELSE 5 END)
				ELSE 4 END)
			ELSE 3 END)
		ELSE 2 END)
	ELSE 1 END)
AS StartingPeriod,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE  Period01 END)
									ELSE  Period02 END)
								ELSE  Period03 END)
							ELSE  Period04 END) 
						ELSE  Period05 END)
					ELSE  Period06 END)
				ELSE  Period07 END)
			ELSE  Period08 END)
		ELSE  Period09 END)
	ELSE  Period10 END)
AS MostRecentPeriodValue,

	(CASE WHEN  Period10 IS NULL THEN
		(CASE WHEN  Period09 IS NULL THEN
			(CASE WHEN  Period08 IS NULL THEN
				(CASE WHEN  Period07 IS NULL THEN
					(CASE WHEN  Period06 IS NULL THEN
						(CASE WHEN  Period05 IS NULL THEN
							(CASE WHEN  Period04 IS NULL THEN
								(CASE WHEN  Period03 IS NULL THEN
									(CASE WHEN  Period02 IS NULL THEN
										(CASE WHEN  Period01 IS NULL THEN
										NULL
										ELSE 1 END)
									ELSE 2 END)
								ELSE 3 END)
							ELSE 4 END) 
						ELSE 5 END)
					ELSE 6 END)
				ELSE 7 END)
			ELSE 8 END)
		ELSE 9 END)
	ELSE 6 END)
AS MostRecentPeriod
INTO #TempvSkillsOverallStudentAnswerAvg_Latestsub
FROM vSkillsOverallStudentAnswer_AvgPivot
WHERE AcademicYearID = @AcademicYearID


--and (for Student Cross-College) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsStudentAvg_Latest
FROM
	#TempvSkillsStudentOnlyAnswerAvg_Latestsub

--and (for Course) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	AcademicYearID,
	CourseCode,
	CourseID,
	StartingPeriod,
	MostRecentPeriod,
	(CASE WHEN StartingValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsCourseAvg_Latest
FROM
	#TempvSkillsCourseStudentOnlyAnswerAvg_Latestsub

--and (for Overall) this does the actual difference between the most recent value and the starting value.
SELECT 
	OGP_StudentID,
	MostRecentPeriod,
	StartingPeriod,
	(CASE WHEN StartingPeriodValue IS NULL THEN NULL ELSE (CASE WHEN MostRecentPeriodValue IS NULL THEN NULL ELSE (MostRecentPeriodValue - StartingPeriodValue) END) END) AS Diff_Start_Latest
INTO #TempvSkillsOverallAvg_Latest
FROM
	#TempvSkillsOverallStudentAnswerAvg_Latestsub


--For the Overall Student Enrolment Status (Cross College),
		
--The Enrolment OverallCompletionID should only be based on 'Imported' records.
--Firstly Load up a series of #Temptables with a count of the completion statuses ...
--It is important that we only take the 'Imported' records - we don't want to look at adhoc records here!
SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp1 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 1 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp2 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 2 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp3 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 3 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp4 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 4 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp5 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 5 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID

SELECT OGP_Enrolment.OGP_StudentID, Count(OGP_Enrolment.OverallCompletionID) AS CountCompletion INTO #TempStudent_Comp6 FROM OGP_Enrolment 
WHERE OGP_Enrolment.OverallCompletionID = 6 AND OGP_Enrolment.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_Enrolment.OGP_StudentID



SELECT 
	OGP_Student.ID AS OGP_StudentID,
	(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
		(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
			(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
				(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
					(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
					99 --Other!
					END) -- Xfer
				END)
			END)
		END)
	END) AS StudentOverallCompletionID

INTO
	#TempOverallStudentCompletion
FROM
	OGP_Student
		INNER JOIN
		(
		SELECT 
			OGP_Student.ID,
			(SELECT CountCompletion FROM #TempStudent_Comp1 WHERE #TempStudent_Comp1.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempStudent_Comp2 WHERE #TempStudent_Comp2.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempStudent_Comp3 WHERE #TempStudent_Comp3.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempStudent_Comp4 WHERE #TempStudent_Comp4.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempStudent_Comp5 WHERE #TempStudent_Comp5.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempStudent_Comp6 WHERE #TempStudent_Comp6.OGP_StudentID = OGP_Student.ID) AS CountCompletionID_6
		FROM
			OGP_Student	
		WHERE
			OGP_Student.AcademicYearID = @AcademicYearID
			AND OGP_Student.RecordStatus <> 'Obsolete'
			--AND OGP_Student.ID IN (SELECT DISTINCT OGP_Enrolment.OGP_StudentID FROM OGP_Enrolment WHERE OGP_Enrolment.AcademicYearID = @AcademicYearID AND OGP_Enrolment.RecordStatus = 'Imported')  
		) t

		ON t.ID = OGP_Student.ID
		 

	


--We want all enrolment details now from VA unioned with EM
SELECT
	EstActVA.AcademicYearID, EstActVA.StudentRef, EstActVA.Forenames, EstActVA.Surname, EstActVA.CourseCode, CourseTitle, 'VA' AS OGP_TypeCode,
	AgeOn31Aug, EstActVA.Gender, Ethnicity, EstActVA.DOB, StartDate, PlannedEndDate, ActualEndDate, NVQLevel, CompletionID, CompletionDescription, EnrolmentGrade,
    TeachingGroupCode, TeachingGroupTitle, LearningAimRef, LearningAimTitle, CollegeStructure,
	StudentUserDefinedString1, StudentUserDefinedString2, StudentUserDefinedString3, StudentUserDefinedString4,
	StudentUserDefinedString5, StudentUserDefinedString6, StudentUserDefinedString7, StudentUserDefinedString8,
	--CAST(StudentUserDefinedNumber AS DECIMAL(19,2)) AS StudentUserDefinedNumber, StudentUserDefinedNumber2, StudentUserDefinedDate, 
	CourseUserDefinedString1, CourseUserDefinedString2, CourseUserDefinedString3, CourseUserDefinedString4,
	EnrolmentUserDefinedString1, EnrolmentUserDefinedString2, EnrolmentUserDefinedString3, EnrolmentUserDefinedString4,
	EnrolmentUserDefinedString5, EnrolmentUserDefinedString6, EnrolmentUserDefinedString7, EnrolmentUserDefinedString8,
	--EnrolmentUserDefinedNumber, EnrolmentUserDefinedNumber2, EnrolmentUserDefinedDate,
	LLDDandHealthProblem, EstActVA.FreeSchoolMeal,

	 OGP_Student.ID AS OGP_StudentID,
	-- vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StuPeriod01,  vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StuPeriod02,  vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StuPeriod03, vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StuPeriod04,  vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StuPeriod05,  
	-- vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StuPeriod06,  vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StuPeriod07,  vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StuPeriod08, vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StuPeriod09,  vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StuPeriod10,
	--#TempvSkillsStudentAvg_Latest.Diff_Start_Latest AS StuDifference,
	--#TempvSkillsStudentAvg_Latest.StartingPeriod AS StuStartingPeriod,
	--#TempvSkillsStudentAvg_Latest.MostRecentPeriod AS StuMostRecentPeriod,
	
	 vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CoursePeriod01,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CoursePeriod02,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CoursePeriod03, vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CoursePeriod04,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CoursePeriod05,  
	 vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CoursePeriod06,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CoursePeriod07,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CoursePeriod08,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CoursePeriod09, vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CoursePeriod10,
	#TempvSkillsCourseAvg_Latest.Diff_Start_Latest AS CourseDifference, 
	#TempvSkillsCourseAvg_Latest.StartingPeriod AS CourseStartingPeriod,
	#TempvSkillsCourseAvg_Latest.MostRecentPeriod AS CourseMostRecentPeriod,

	 --vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseNumResponsePeriod01,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseNumResponsePeriod02,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseNumResponsePeriod03, vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseNumResponsePeriod04,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseNumResponsePeriod05,  
	 --vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseNumResponsePeriod06,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseNumResponsePeriod07,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseNumResponsePeriod08,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseNumResponsePeriod09, vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseNumResponsePeriod10,

	 vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallPeriod01,  vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallPeriod02,  vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallPeriod03, vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallPeriod04, vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallPeriod05,  
	 vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallPeriod06,  vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallPeriod07,  vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallPeriod08, vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallPeriod09, vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallPeriod10,
	#TempvSkillsOverallAvg_Latest.Diff_Start_Latest AS OverallDifference, 
	#TempvSkillsOverallAvg_Latest.StartingPeriod AS OverallStartingPeriod,
	#TempvSkillsOverallAvg_Latest.MostRecentPeriod AS OverallMostRecentPeriod--,

	-- vSkillsOverallStudentAnswer_CountPivot.Period01 AS OverallNumResponsePeriod01,  vSkillsOverallStudentAnswer_CountPivot.Period02 AS OverallNumResponsePeriod02,  vSkillsOverallStudentAnswer_CountPivot.Period03 AS OverallNumResponsePeriod03, vSkillsOverallStudentAnswer_CountPivot.Period04 AS OverallNumResponsePeriod04, vSkillsOverallStudentAnswer_CountPivot.Period05 AS OverallNumResponsePeriod05,  
	 --vSkillsOverallStudentAnswer_CountPivot.Period06 AS OverallNumResponsePeriod06,  vSkillsOverallStudentAnswer_CountPivot.Period07 AS OverallNumResponsePeriod07,  vSkillsOverallStudentAnswer_CountPivot.Period08 AS OverallNumResponsePeriod08, vSkillsOverallStudentAnswer_CountPivot.Period09 AS OverallNumResponsePeriod09, vSkillsOverallStudentAnswer_CountPivot.Period10 AS OverallNumResponsePeriod10


FROM 
	EstActVA
	LEFT JOIN OGP_Student ON EstActVA.StudentRef = OGP_Student.StudentRef AND EstActVA.AcademicYearID = OGP_Student.AcademicYearID
	--LEFT JOIN #TempvSkillsStudentAvg_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvg_Latest.OGP_StudentID
	--LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsCourseAvg_Latest ON OGP_Student.ID =  #TempvSkillsCourseAvg_Latest.OGP_StudentID
		AND EstActVA.CourseCode =  #TempvSkillsCourseAvg_Latest.CourseCode
		AND EstActVA.AcademicYearID =  #TempvSkillsCourseAvg_Latest.AcademicYearID 
	LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot 
		ON OGP_Student.ID = vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID 
		AND EstActVA.CourseCode = vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseCode
		AND EstActVA.AcademicYearID = vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID
	LEFT JOIN #TempvSkillsOverallAvg_Latest ON OGP_Student.ID =  #TempvSkillsOverallAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID

	LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot 
		ON OGP_Student.ID = vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID 
		AND EstActVA.CourseCode = vSkillsCourseStudentOnlyAnswer_CountPivot.CourseCode
		AND EstActVA.AcademicYearID = vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID
	LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID

WHERE
	EstActVA.AcademicYearID = @AcademicYearID

UNION 

SELECT
	EngMat_Enrolment_InYear.AcademicYearID, EngMat_Enrolment_InYear.StudentRef, EngMat_Enrolment_InYear.Forenames, EngMat_Enrolment_InYear.Surname, EngMat_Enrolment_InYear.CourseCode, CourseTitle, EngMatType AS OGP_TypeCode,
	AgeOn31Aug, EngMat_Enrolment_InYear.Gender, EthnicityCode + ' ' + Ethnicity, EngMat_Enrolment_InYear.DOB, StartDate, PlannedEndDate, ActualEndDate, NotionalNVQLevel, CompletionID, CompletionStatus, EnrolmentGrade,
    TeachingGroupCode, TeachingGroupTitle, LearningAimRef, LearningAimRefTitle, CollegeStructure,
	StudentUserDefinedString1, StudentUserDefinedString2, StudentUserDefinedString3, StudentUserDefinedString4,
	StudentUserDefinedString5, StudentUserDefinedString6, StudentUserDefinedString7, StudentUserDefinedString8,
	--StudentUserDefinedNumber, StudentUserDefinedNumber2, StudentUserDefinedDate, 
	CourseUserDefinedString1, CourseUserDefinedString2, CourseUserDefinedString3, CourseUserDefinedString4,
	EnrolmentUserDefinedString1, EnrolmentUserDefinedString2, EnrolmentUserDefinedString3, EnrolmentUserDefinedString4,
	EnrolmentUserDefinedString5, EnrolmentUserDefinedString6, EnrolmentUserDefinedString7, EnrolmentUserDefinedString8,
	--EnrolmentUserDefinedNumber, EnrolmentUserDefinedNumber2, EnrolmentUserDefinedDate,
	LLDDandHealthProblemCode + ' ' + LLDDandHealthProblem, EngMat_Enrolment_InYear.FreeSchoolMeal,

	 OGP_Student.ID AS OGP_StudentID,
	-- vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StuPeriod01,  vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StuPeriod02,  vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StuPeriod03, vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StuPeriod04,  vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StuPeriod05,  
	-- vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StuPeriod06,  vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StuPeriod07,  vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StuPeriod08, vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StuPeriod09,  vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StuPeriod10,
	--#TempvSkillsStudentAvg_Latest.Diff_Start_Latest AS StuDifference,
	--#TempvSkillsStudentAvg_Latest.StartingPeriod AS StuStartingPeriod,
	--#TempvSkillsStudentAvg_Latest.MostRecentPeriod AS StuMostRecentPeriod,
	
	 vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CoursePeriod01,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CoursePeriod02,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CoursePeriod03, vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CoursePeriod04,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CoursePeriod05,  
	 vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CoursePeriod06,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CoursePeriod07,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CoursePeriod08,  vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CoursePeriod09, vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CoursePeriod10,
	#TempvSkillsCourseAvg_Latest.Diff_Start_Latest AS CourseDifference, 
	#TempvSkillsCourseAvg_Latest.StartingPeriod AS CourseStartingPeriod,
	#TempvSkillsCourseAvg_Latest.MostRecentPeriod AS CourseMostRecentPeriod,

	 --vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseNumResponsePeriod01,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseNumResponsePeriod02,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseNumResponsePeriod03, vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseNumResponsePeriod04,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseNumResponsePeriod05,  
	 --vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseNumResponsePeriod06,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseNumResponsePeriod07,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseNumResponsePeriod08,  vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseNumResponsePeriod09, vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseNumResponsePeriod10,

	 vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallPeriod01,  vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallPeriod02,  vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallPeriod03, vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallPeriod04, vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallPeriod05,  
	 vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallPeriod06,  vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallPeriod07,  vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallPeriod08, vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallPeriod09, vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallPeriod10,
	#TempvSkillsOverallAvg_Latest.Diff_Start_Latest AS OverallDifference, 
	#TempvSkillsOverallAvg_Latest.StartingPeriod AS OverallStartingPeriod,
	#TempvSkillsOverallAvg_Latest.MostRecentPeriod AS OverallMostRecentPeriod

	 --vSkillsOverallStudentAnswer_CountPivot.Period01 AS OverallNumResponsePeriod01,  vSkillsOverallStudentAnswer_CountPivot.Period02 AS OverallNumResponsePeriod02,  vSkillsOverallStudentAnswer_CountPivot.Period03 AS OverallNumResponsePeriod03, vSkillsOverallStudentAnswer_CountPivot.Period04 AS OverallNumResponsePeriod04, vSkillsOverallStudentAnswer_CountPivot.Period05 AS OverallNumResponsePeriod05,  
	 --vSkillsOverallStudentAnswer_CountPivot.Period06 AS OverallNumResponsePeriod06,  vSkillsOverallStudentAnswer_CountPivot.Period07 AS OverallNumResponsePeriod07,  vSkillsOverallStudentAnswer_CountPivot.Period08 AS OverallNumResponsePeriod08, vSkillsOverallStudentAnswer_CountPivot.Period09 AS OverallNumResponsePeriod09, vSkillsOverallStudentAnswer_CountPivot.Period10 AS OverallNumResponsePeriod10


FROM
	EngMat_Enrolment_InYear
	LEFT JOIN OGP_Student ON EngMat_Enrolment_InYear.StudentRef = OGP_Student.StudentRef AND EngMat_Enrolment_InYear.AcademicYearID = OGP_Student.AcademicYearID
	--LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON OGP_Student.ID =  vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID
	--LEFT JOIN #TempvSkillsStudentAvg_Latest ON OGP_Student.ID = #TempvSkillsStudentAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON OGP_Student.ID =  vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID
		AND EngMat_Enrolment_InYear.CourseID =  vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID
	LEFT JOIN #TempvSkillsCourseAvg_Latest ON OGP_Student.ID = #TempvSkillsCourseAvg_Latest.OGP_StudentID 
		AND EngMat_Enrolment_InYear.CourseID = #TempvSkillsCourseAvg_Latest.CourseID
	LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON OGP_Student.ID =  vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsOverallAvg_Latest ON OGP_Student.ID = #TempvSkillsOverallAvg_Latest.OGP_StudentID

	LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON OGP_Student.ID =  vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID
	AND EngMat_Enrolment_InYear.CourseID =  vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID
	LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON OGP_Student.ID =  vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID

WHERE
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID

--UNION with the Cross-College records
UNION

SELECT

	OGP_Student.AcademicYearID, StudentRef, Forenames, Surname, 
	NULL AS CourseCode, NULL AS CourseTitle, 'Cross-College' AS OGP_TypeCode,
	(SELECT dbo.GetAgeOnDate(
	CAST((SELECT CAST(AcademicYearNo AS VARCHAR(4)) FROM AcademicYear WHERE AcademicYear.AcademicYearID = OGP_Student.AcademicYearID ) + '0831' AS DateTime),
	OGP_Student.DOB
	)) AS AgeOn31Aug,
	Gender, 
	(SELECT Ethnicity.Code + ' - ' + Ethnicity.[Definition] FROM Ethnicity WHERE Ethnicity.ID = OGP_Student.EthnicityID) AS Ethnicity, 
	DOB, 
	NULL AS StartDate, NULL AS PlannedEndDate, NULL AS ActualEndDate, NULL AS NotionalNVQLevel,
	#TempOverallStudentCompletion.StudentOverallCompletionID, 
	ISNULL((SELECT [Description]FROM Completion WHERE Completion.ID = #TempOverallStudentCompletion.StudentOverallCompletionID), 'n/a') AS CompletionStatus, NULL AS Grade,
	NULL AS TeachingGroupCode, NULL AS TeachingGroupTitle, NULL AS LearningAimRef, NULL AS LearningAimRefTitle, NULL AS CollegeStructure,
	UserDefinedString1, UserDefinedString2, UserDefinedString3, UserDefinedString4,
	UserDefinedString5, UserDefinedString6, UserDefinedString7, UserDefinedString8,
	--UserDefinedNumber, UserDefinedNumber2, UserDefinedDate, 
	NULL AS CourseUserDefinedString1, NULL AS CourseUserDefinedString2, NULL AS CourseUserDefinedString3, NULL AS CourseUserDefinedString4,
	NULL AS EnrolmentUserDefinedString1, NULL AS EnrolmentUserDefinedString2, NULL AS EnrolmentUserDefinedString3, NULL AS EnrolmentUserDefinedString4,
	NULL AS EnrolmentUserDefinedString5, NULL AS EnrolmentUserDefinedString6, NULL AS EnrolmentUserDefinedString7, NULL AS EnrolmentUserDefinedString8,
	--NULL AS EnrolmentUserDefinedNumber, NULL AS EnrolmentUserDefinedNumber2, NULL AS EnrolmentUserDefinedDate, 
	(SELECT LLDDandHealthProblem.Code + ' - ' + LLDDandHealthProblem.[Definition] FROM LLDDandHealthProblem WHERE LLDDandHealthProblem.ID = OGP_Student.LLDDandHealthProblemID) AS Ethnicity, 
	OGP_Student.FreeSchoolMeal,
	
	OGP_Student.ID AS OGP_StudentID,

	 vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StuPeriod01,  vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StuPeriod02,  vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StuPeriod03, vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StuPeriod04,  vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StuPeriod05,  
	 vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StuPeriod06,  vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StuPeriod07,  vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StuPeriod08, vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StuPeriod09,  vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StuPeriod10,
	#TempvSkillsStudentAvg_Latest.Diff_Start_Latest AS StuDifference,
	#TempvSkillsStudentAvg_Latest.StartingPeriod AS StuStartingPeriod,
	#TempvSkillsStudentAvg_Latest.MostRecentPeriod AS StuMostRecentPeriod,
	
	 vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallPeriod01,  vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallPeriod02,  vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallPeriod03, vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallPeriod04, vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallPeriod05,  
	 vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallPeriod06,  vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallPeriod07,  vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallPeriod08, vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallPeriod09, vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallPeriod10,
	#TempvSkillsOverallAvg_Latest.Diff_Start_Latest AS OverallDifference, 
	#TempvSkillsOverallAvg_Latest.StartingPeriod AS OverallStartingPeriod,
	#TempvSkillsOverallAvg_Latest.MostRecentPeriod AS OverallMostRecentPeriod--,

	 --vSkillsOverallStudentAnswer_CountPivot.Period01 AS OverallNumResponsePeriod01,  vSkillsOverallStudentAnswer_CountPivot.Period02 AS OverallNumResponsePeriod02,  vSkillsOverallStudentAnswer_CountPivot.Period03 AS OverallNumResponsePeriod03, vSkillsOverallStudentAnswer_CountPivot.Period04 AS OverallNumResponsePeriod04, vSkillsOverallStudentAnswer_CountPivot.Period05 AS OverallNumResponsePeriod05,  
	 --vSkillsOverallStudentAnswer_CountPivot.Period06 AS OverallNumResponsePeriod06,  vSkillsOverallStudentAnswer_CountPivot.Period07 AS OverallNumResponsePeriod07,  vSkillsOverallStudentAnswer_CountPivot.Period08 AS OverallNumResponsePeriod08, vSkillsOverallStudentAnswer_CountPivot.Period09 AS OverallNumResponsePeriod09, vSkillsOverallStudentAnswer_CountPivot.Period10 AS OverallNumResponsePeriod10

FROM 
	OGP_Student 
	LEFT JOIN #TempvSkillsStudentAvg_Latest ON OGP_Student.ID =  #TempvSkillsStudentAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON OGP_Student.ID = vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID
	LEFT JOIN #TempvSkillsOverallAvg_Latest ON OGP_Student.ID =  #TempvSkillsOverallAvg_Latest.OGP_StudentID
	LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID

	LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON OGP_Student.ID = vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID
	LEFT JOIN #TempOverallStudentCompletion ON OGP_Student.ID = #TempOverallStudentCompletion.OGP_StudentID

WHERE
	OGP_Student.AcademicYearID = @AcademicYearID
	AND OGP_Student.RecordStatus <> 'Obsolete'

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]    Script Date: 02/05/2024 11:07:50 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select] AS' 
END
GO







ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]
  @CourseID             INT,
  @StudentID            INT,
  @SkillsPeriodID		INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 26/03/2024 
-- Descripton:	SP to retrieve the Skills Questions and Answers for a Student and Period and Course
-- Example:     exec sp_WebPlus_SkillsStudentCourseQuestions_Select 5399, 44339, 1
-- =============================================

SELECT 
  SkillsCourseQuestion.ID                   AS QuestionID, 
  SkillsCourseQuestion.Description          AS QuestionDescription, 
  SkillsCourseQuestion.IsObsolete           AS QuestionIsObsolete, 
  SkillsAnswer.Description                  AS AnswerDescription,
  SkillsAnswer.IsObsolete                   AS AnswerIsObsolete,
  SkillsAnswerType.ID                       AS AnswerTypeID, 
  SkillsAnswerType.Description              AS AnswerTypeDescription, 
  SkillsAnswerType.IsObsolete               AS AnswerTypeIsObsolete,
  SkillsCourseStudentAnswer.ID              AS StudentAnswerID, 
  SkillsCourseStudentAnswer.AnswerText      AS AnswerText,
  SkillsCourseStudentAnswer.SkillsAnswerID  AS AnswerID, 
  SkillsPeriod.ID                           AS PeriodID, 
  SkillsPeriod.AcademicYearID               AS PeriodAcademicYearID, 
  SkillsPeriod.DefaultDescription           AS PeriodDefaultDescription, 
  SkillsPeriod.SkillsPeriodDescription      AS PeriodDescription, 
  SkillsPeriod.IsEditable                   AS PeriodIsEditable,  
  SkillsPeriod.ShowByDefaultOpenDate        AS PeriodOpenDate, 
  SkillsPeriod.ShowByDefaultCloseDate       AS PeriodCloseDate,
  SkillsCourseStudentAnswer.UpdatedBy       AS UpdatedBy,
  SkillsCourseStudentAnswer.UpdatedWhen     AS UpdatedWhen,
  Usr.Forenames                             AS UpdatedForenames,
  Usr.Surname                               AS UpdatedSurname
FROM 
  SkillsCourseQuestion
    LEFT JOIN SkillsCourseStudentAnswer ON
	  SkillsCourseStudentAnswer.SkillsCourseQuestionID = SkillsCourseQuestion.ID  AND 
	  SkillsCourseStudentAnswer.OGP_StudentID          = @StudentID               AND 
	  SkillsCourseStudentAnswer.SkillsPeriodID         = @SkillsPeriodID
    INNER JOIN SkillsAnswerType ON 
	  SkillsCourseQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
	LEFT JOIN SkillsAnswer ON
		SkillsAnswer.ID = SkillsCourseStudentAnswer.SkillsAnswerID
	LEFT JOIN SkillsPeriod ON
		SkillsPeriod.ID = SkillsCourseStudentAnswer.SkillsPeriodID  
	LEFT JOIN [User] Usr ON
	    Usr.UserName = SkillsCourseStudentAnswer.UpdatedBy
WHERE
  --Note: we now load all Questions regardless of Obsolete (rules are applied in the Controller)
  --SkillsCourseQuestion.IsObsolete = 0          AND
  --SkillsAnswerType.IsObsolete     = 0          AND  
  SkillsCourseQuestion.CourseID   = @CourseID          
ORDER BY
  SkillsCourseQuestion.OrderBy

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsStudentQuestions_Select]    Script Date: 02/05/2024 11:07:50 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsStudentQuestions_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsStudentQuestions_Select] AS' 
END
GO










ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsStudentQuestions_Select]
  @StudentID            INT,
  @SkillsPeriodID		INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 26/03/2024 
-- Descripton:	SP to retrieve the Skills Questions and Answers for a Student and Period
-- Example:     exec sp_WebPlus_SkillsStudentQuestions_Select 44339, 1
-- =============================================

SELECT 
  SkillsQuestion.ID                     AS QuestionID, 
  SkillsQuestion.Description            AS QuestionDescription,
  SkillsQuestion.IsObsolete             AS QuestionIsObsolete, 
  SkillsAnswer.Description              AS AnswerDescription,
  SkillsAnswer.IsObsolete               AS AnswerIsObsolete,
  SkillsAnswerType.ID                   AS AnswerTypeID, 
  SkillsAnswerType.Description          AS AnswerTypeDescription, 
  SkillsAnswerType.IsObsolete           AS AnswerTypeIsObsolete,
  SkillsStudentAnswer.ID                AS StudentAnswerID,
  SkillsStudentAnswer.AnswerText        AS AnswerText,
  SkillsStudentAnswer.SkillsAnswerID    AS AnswerID, 
  SkillsPeriod.ID                       AS PeriodID, 
  SkillsPeriod.AcademicYearID           AS PeriodAcademicYearID, 
  SkillsPeriod.DefaultDescription       AS PeriodDefaultDescription, 
  SkillsPeriod.SkillsPeriodDescription  AS PeriodDescription, 
  SkillsPeriod.IsEditable               AS PeriodIsEditable,  
  SkillsPeriod.ShowByDefaultOpenDate    AS PeriodOpenDate, 
  SkillsPeriod.ShowByDefaultCloseDate   AS PeriodCloseDate,
  SkillsStudentAnswer.UpdatedBy         AS UpdatedBy,
  SkillsStudentAnswer.UpdatedWhen       AS UpdatedWhen,
  Usr.Forenames                         AS UpdatedForenames,
  Usr.Surname                           AS UpdatedSurname
FROM 
  SkillsQuestion
    LEFT JOIN SkillsStudentAnswer ON
	  SkillsStudentAnswer.SkillsQuestionID = SkillsQuestion.ID AND 
	  SkillsStudentAnswer.OGP_StudentID = @StudentID           AND 
	  SkillsPeriodID = @SkillsPeriodID
    INNER JOIN SkillsAnswerType ON 
	  SkillsQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
	LEFT JOIN SkillsAnswer ON
		SkillsAnswer.ID = SkillsStudentAnswer.SkillsAnswerID
	LEFT JOIN SkillsPeriod ON
		SkillsPeriod.ID = SkillsStudentAnswer.SkillsPeriodID  -- AND AcademicYearID = '23/24'
	LEFT JOIN [User] Usr ON
	    Usr.UserName = SkillsStudentAnswer.UpdatedBy
--Note: we now load all Questions regardless of Obsolete (rules are applied in the Controller)
--WHERE
--  SkillsQuestion.IsObsolete = 0   AND
--  SkillsAnswerType.IsObsolete = 0
ORDER BY
  SkillsQuestion.OrderBy

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_CoursesForStudent_Select]    Script Date: 02/05/2024 11:07:51 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_CoursesForStudent_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_CoursesForStudent_Select] AS' 
END
GO







ALTER PROCEDURE [dbo].[sp_WebPlus_CoursesForStudent_Select]
@AcademicYearID  VARCHAR(5),
@StudentRef      VARCHAR(20),
@IncludeVA       bit,
@IncludeEM       bit

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 25/03/2024 
-- Descripton:	SP to retrieve the Courses for a Student
-- Example:     exec sp_WebPlus_CoursesForStudent_Select '22/23', '118062', 1, 1
-- =============================================

SELECT DISTINCT 
    'VA'               AS TypeCode,
	OGP_Enrolment.ID   AS EnrolmentID, 
	EstactVA.ID        AS ID, 
	EstactVA.AcademicYearID,
	EstactVA.StudentRef,
	EstactVA.Surname, 
	EstactVA.Forenames, 
	Course.ID          AS CourseID, 
	Course.CourseCode  AS CourseCode, 
	Course.Title       AS CourseTitle,
	EstactVA.CompletionDescription AS CompletionDescription,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
    --
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallAvg_Period01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallAvg_Period02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallAvg_Period03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallAvg_Period04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallAvg_Period05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallAvg_Period06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallAvg_Period07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallAvg_Period08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallAvg_Period09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallAvg_Period10
	--
FROM 
	EstactVA 
		INNER JOIN Course ON
		    EstactVA.CourseCode = Course.CourseCode						AND 
			Course.AcademicYearID = EstactVA.AcademicYearID 
		INNER JOIN OGP_Enrolment ON 
			Course.ID = OGP_Enrolment.CourseID							AND 
			OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID		AND 
			EstActVA.StudentRef = OGP_Enrolment.StudentRef  
		LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
			vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND
			vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID							AND
			vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
			vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID	AND
			vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID							AND
			vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
			vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID			AND 
			vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
			vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID			AND 
			vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
			vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND 
			vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
			vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND 
			vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID

WHERE 
	EstActVA.StudentRef = @StudentRef 
AND 
	EstActVA.AcademicYearID = @AcademicYearID 
AND
	@IncludeVA = 1
UNION
SELECT DISTINCT 
    'EM'               AS TypeCode,
	OGP_Enrolment.ID   AS EnrolmentID, 
	EngMat_Enrolment_InYear.ID AS ID, 
	EngMat_Enrolment_InYear.AcademicYearID,
	EngMat_Enrolment_InYear.StudentRef,
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	Course.ID          AS CourseID, 
	Course.CourseCode  AS CourseCode, 
	Course.Title       AS CourseTitle,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
    --
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS OverallAvg_Period01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS OverallAvg_Period02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS OverallAvg_Period03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS OverallAvg_Period04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS OverallAvg_Period05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS OverallAvg_Period06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS OverallAvg_Period07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS OverallAvg_Period08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS OverallAvg_Period09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS OverallAvg_Period10
	--
FROM 
	EngMat_Enrolment_InYear	
		INNER JOIN Course ON
		    EngMat_Enrolment_InYear.CourseCode = Course.CourseCode 			AND 
			Course.AcademicYearID = EngMat_Enrolment_InYear.AcademicYearID 
		INNER JOIN OGP_Enrolment ON 
			Course.ID = OGP_Enrolment.CourseID								AND 
			OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID			AND 
			EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  
		LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
			vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND
			vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID							AND
			vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
			vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID	AND
			vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID							AND
			vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
			vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID			AND 
			vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
			vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID			AND 
			vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
			vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND 
			vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
		LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
			vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID		AND 
			vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID


WHERE 
	EngMat_Enrolment_InYear.StudentRef = @StudentRef 
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID 
AND 
	@IncludeEM = 1

ORDER BY 1 DESC, 9  -- Type, CourseCode

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_EMSkills_Select]    Script Date: 02/05/2024 11:07:52 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_EMSkills_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_EMSkills_Select] AS' 
END
GO







ALTER PROCEDURE [dbo].[sp_WebPlus_EMSkills_Select]
@AcademicYearID   VARCHAR(5),
@EngMatType       VARCHAR(7),    -- ENGLISH MATHS or ALL
@SearchType       VARCHAR(11),   -- GROUP or COURSE or LEARNINGAIM
@SearchCode       VARCHAR(50)

AS
-- ========================================================================================================================
-- Author:		Andrew Breward
-- Create date: AndyB 18/03/2024 
-- Descripton:	SP to retrieve the Students for a GROUP or COURSE or LEARNINGAIM
-- Example:     exec sp_WebPlus_EMSkills_Select '22/23', 'GROUP', '23- WD/TRF'
--              exec sp_WebPlus_EMSkills_Select '22/23', 'STUDENT', '440082'
-- Modified:	AndyB 20/03/2024 Added CourseID
--
-- ========================================================================================================================

DECLARE @MaxRecords INT;
SET @MaxRecords = (SELECT 
                     IsNull(SystemSettingValue, DefaultValue) AS SystemSettingValue   
				   FROM 
				     SystemSettingValue 
				   WHERE 
				     SystemSettingName = 'WebPlusMaxAllowedStudentsGrid');
IF IsNull(@MaxRecords, 0) <= 0 SET @MaxRecords = 1000;

Print 'Max Records: ' + STR(@MaxRecords);
Print 'SearchType: ' + @SearchType;


--****************************************************************************************
--                              G R O U P
--****************************************************************************************
IF @SearchType = 'GROUP'
BEGIN

	SELECT TOP (@MaxRecords) * FROM
	(
	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		EngMat_Enrolment_InYear.TeachingGroupCode, 
		EngMat_Enrolment_InYear.TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
	'IMPORTED' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
					--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
					INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
                                			 OGP_Group.OGP_TypeCode = @EngMatType AND 
											 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
											 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE 
		EngMat_Enrolment_InYear.TeachingGroupCode = @SearchCode
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Enrolment.RecordStatus = 'Imported'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType

	UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
		OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
	'ADHOC' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
					INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND 
						           OGP_Group.OGP_TypeCode = @EngMatType 
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE
		OGP_Group.OGP_GroupCode = @SearchCode
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Group.RecordStatus = 'Adhoc'
	AND 
		OGP_GroupEnrolment.RecordStatus = 'Adhoc'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType
	) union_query
	ORDER BY 
		4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              C O U R S E
--****************************************************************************************
IF @SearchType = 'COURSE'
BEGIN

	SELECT TOP (@MaxRecords) * FROM
	(
	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		EngMat_Enrolment_InYear.TeachingGroupCode, 
		EngMat_Enrolment_InYear.TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
	'IMPORTED' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
					--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
					INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
                                			 OGP_Group.OGP_TypeCode = @EngMatType AND 
											 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
											 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE 
		(
			(EngMat_Enrolment_InYear.CourseCode = @SearchCode)
		)
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Enrolment.RecordStatus = 'Imported'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType

	UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
		OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'ADHOC' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
					INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND 
						                        OGP_Group.OGP_TypeCode = @EngMatType 
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE
		(
			(EngMat_Enrolment_InYear.CourseCode = @SearchCode)
		)
    	AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      	  --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
		AND OGP_Group.RecordStatus = 'Adhoc'
		AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
		AND EngMat_Enrolment_InYear.EngMatType = @EngMatType
	) union_query
	ORDER BY 
		4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              L E A R N I N G   A I M
--****************************************************************************************
IF @SearchType IN ('LEARNINGAIM', 'LEARN')
BEGIN

	SELECT TOP (@MaxRecords) * FROM
	(
	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		EngMat_Enrolment_InYear.TeachingGroupCode, 
		EngMat_Enrolment_InYear.TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
		--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
		--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
		--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'IMPORTED' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
					--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
					INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
                                			 OGP_Group.OGP_TypeCode = @EngMatType AND 
											 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
											 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE 
		(
			(EngMat_Enrolment_InYear.LearningAimRef = @SearchCode)
		)
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Enrolment.RecordStatus = 'Imported'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType

	UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
		OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'ADHOC' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
					INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND 
						                        OGP_Group.OGP_TypeCode = @EngMatType 
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE
		(
			(EngMat_Enrolment_InYear.LearningAimRef = @SearchCode)
		)
    	AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      	  --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
		AND OGP_Group.RecordStatus = 'Adhoc'
		AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
		AND EngMat_Enrolment_InYear.EngMatType = @EngMatType
	) union_query
	ORDER BY 
		4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              D E P A R T M E N T
--****************************************************************************************
IF @SearchType IN ('DEPARTMENT', 'DEPT') 
BEGIN

	SELECT TOP (@MaxRecords) * FROM
	(
	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		EngMat_Enrolment_InYear.TeachingGroupCode, 
		EngMat_Enrolment_InYear.TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'IMPORTED' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
					--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
					INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
                                			 OGP_Group.OGP_TypeCode = @EngMatType AND 
											 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
											 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE 
		EngMat_Enrolment_InYear.CollegeStructure = @SearchCode
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Enrolment.RecordStatus = 'Imported'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType

	UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

	SELECT TOP (@MaxRecords)
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
		OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'ADHOC' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
					INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND 
						                        OGP_Group.OGP_TypeCode = @EngMatType 
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE
		EngMat_Enrolment_InYear.CollegeStructure = @SearchCode
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Group.RecordStatus = 'Adhoc'
	AND 
		OGP_GroupEnrolment.RecordStatus = 'Adhoc'
	AND 
		EngMat_Enrolment_InYear.EngMatType = @EngMatType
	) union_query
	ORDER BY 
		4,5,3   -- Surname,Forename,StudentRef

END


--******************************************************************************************
--                        S T U D E N T  - only 1 row
--******************************************************************************************
IF @SearchType = 'STUDENT'
BEGIN
	SELECT
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		EngMat_Enrolment_InYear.TeachingGroupCode, 
		EngMat_Enrolment_InYear.TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'IMPORTED' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
					--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
					INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
--we want both English & Maths --			 OGP_Group.OGP_TypeCode = @EngMatType AND 
											 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
											 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE 
		(
			(EngMat_Enrolment_InYear.StudentRef = @SearchCode) 
		)
	AND 
		EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
	AND 
		OGP_Enrolment.RecordStatus = 'Imported'
	--AND 
	--	EngMat_Enrolment_InYear.EngMatType = @EngMatType

	UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

	SELECT
		EngMat_Enrolment_InYear.ID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		EngMat_Enrolment_InYear.StudentRef, 
		EngMat_Enrolment_InYear.Surname, 
		EngMat_Enrolment_InYear.Forenames, 
		EngMat_Enrolment_InYear.AgeOn31Aug, 
		EngMat_Enrolment_InYear.Gender, 
		EngMat_Enrolment_InYear.Ethnicity, 
		EngMat_Enrolment_InYear.DOB,
		EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
		EngMat_Enrolment_InYear.OutcomeDescription,
		EngMat_Enrolment_InYear.OutcomeID,
		EngMat_Enrolment_InYear.CollegeStructure,
		EngMat_Enrolment_InYear.CurrentYear,
		EngMat_Enrolment_InYear.StartDate, 
		EngMat_Enrolment_InYear.PlannedEndDate, 
		EngMat_Enrolment_InYear.ActualEndDate, 
		EngMat_Enrolment_InYear.PriorAttainment_KS4,
		EngMat_Enrolment_InYear.StartQOE_HighestGrade,
		EngMat_Enrolment_InYear.StartQOE_HighestQualType,
		EngMat_Enrolment_InYear.StartInfo,
		EngMat_Enrolment_InYear.WDNumDaysAfterStart,
		EngMat_Enrolment_InYear.CappedPoints, 
		EngMat_Enrolment_InYear.Approved,
		--EngMat_Enrolment_InYear.Size, n/a
		--EngMat_Enrolment_InYear.Duration,  n/a
		--EngMat_Enrolment_InYear.Cohort,  n/a
		EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
		OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
		OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
		OGP_Group.ID AS TeachingGroupID,
        Course.ID AS CourseID,
		EngMat_Enrolment_InYear.CourseCode, 
		EngMat_Enrolment_InYear.CourseTitle, 
		EngMat_Enrolment_InYear.LearningAimRef, 
		EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
		--EngMat_Enrolment_InYear.Qualification,  n/a
		--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
		EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
		 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
		 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
		--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
		EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
		EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
		EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
		EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
		EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
		EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
		--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
		EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
		EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
		EngMat_Enrolment_InYear.CompletionID,
		EngMat_Enrolment_InYear.PersonalTargetGrade,
		EngMat_Enrolment_InYear.EnrolmentGrade,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
		EngMat_Enrolment_InYear.IYProgressMostRecent,
		--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
		--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
		EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
		EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
		'ADHOC' AS RecordStatus
	FROM
		EngMat_Enrolment_InYear
			INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
				INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
					INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID --we want both English & Maths --			 AND OGP_Group.OGP_TypeCode = @EngMatType 
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
	WHERE
		(
			(EngMat_Enrolment_InYear.StudentRef = @SearchCode) 
		)
    	AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      	  --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
		AND OGP_Group.RecordStatus = 'Adhoc'
		AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
		--AND EngMat_Enrolment_InYear.EngMatType = @EngMatType

	ORDER BY 
		4,5,3   -- Surname,Forename,StudentRef

END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_EMStudents_Select]    Script Date: 02/05/2024 11:07:52 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_EMStudents_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_EMStudents_Select] AS' 
END
GO





ALTER PROCEDURE [dbo].[sp_WebPlus_EMStudents_Select]
@AcademicYearID   VARCHAR(5),
@EngMatType       VARCHAR(7),
@SearchType       VARCHAR(11),   -- GROUP or COURSE or LEARNINGAIM
@SearchCode       VARCHAR(50)

AS
-- ========================================================================================================================
-- Author:		Andrew Breward
-- Create date: AndyB 20/03/2024
-- Descripton:	SP to retrieve the Students for a GROUP or COURSE or LEARNINGAIM
-- Example:     exec sp_WebPlus_EMStudents_Select '22/23', 'English', 'GROUP', '28038W2 28038W2_GpC'
-- Modified:	AndyG  30/07/2023  OR statements were imacting performance, so each SearchType now treated separately
--              AndyB  07/12/2023  Added CollegeStructure field
--              AndyB  04/03/2024  Added TOP (@MaxRecords)
--                                 Added Department SearchType
--              AndyB  20/03/2024  Added CourseID
-- ========================================================================================================================

DECLARE @MaxRecords INT;
SET @MaxRecords = (SELECT 
                     IsNull(SystemSettingValue, DefaultValue) AS SystemSettingValue   
				   FROM 
				     SystemSettingValue 
				   WHERE 
				     SystemSettingName = 'WebPlusMaxAllowedStudentsGrid');
IF IsNull(@MaxRecords, 0) <= 0 SET @MaxRecords = 1000;

Print 'Max Records: ' + STR(@MaxRecords);
Print 'SearchType: ' + @SearchType;


--****************************************************************************************
--                              G R O U P
--****************************************************************************************
IF @SearchType = 'GROUP'
BEGIN

SELECT TOP (@MaxRecords) * FROM
(
SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    EngMat_Enrolment_InYear.TeachingGroupCode, 
	EngMat_Enrolment_InYear.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3, 
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'IMPORTED' AS RecordStatus
FROM
    EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = @EngMatType AND 
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EngMat_Enrolment_InYear.TeachingGroupCode = @SearchCode
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType

UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
	OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3,
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'ADHOC' AS RecordStatus
FROM
	EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
WHERE
	OGP_Group.OGP_GroupCode = @SearchCode
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType
) union_query
ORDER BY 
	4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              C O U R S E
--****************************************************************************************
IF @SearchType = 'COURSE'
BEGIN

SELECT TOP (@MaxRecords) * FROM
(
SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    EngMat_Enrolment_InYear.TeachingGroupCode, 
	EngMat_Enrolment_InYear.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3, 
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'IMPORTED' AS RecordStatus
FROM
    EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = @EngMatType AND 
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	(
		(EngMat_Enrolment_InYear.CourseCode = @SearchCode)
	)
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType

UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
	OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3,
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'ADHOC' AS RecordStatus
FROM
	EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
WHERE
	(
		(EngMat_Enrolment_InYear.CourseCode = @SearchCode)
	)
    AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
	AND OGP_Group.RecordStatus = 'Adhoc'
	AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
--	AND OGP_Enrolment.RecordStatus = 'Adhoc'
	AND EngMat_Enrolment_InYear.EngMatType = @EngMatType
) union_query
ORDER BY 
	4,5,3   -- Surname,Forename,StudentRef


END


--****************************************************************************************
--                              L E A R N I N G   A I M
--****************************************************************************************
IF @SearchType IN ('LEARNINGAIM', 'LEARN')
BEGIN

SELECT TOP (@MaxRecords) * FROM
(
SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    EngMat_Enrolment_InYear.TeachingGroupCode, 
	EngMat_Enrolment_InYear.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3, 
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'IMPORTED' AS RecordStatus
FROM
    EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = @EngMatType AND 
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	(
		(EngMat_Enrolment_InYear.LearningAimRef = @SearchCode)
	)
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType

UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
	OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3,
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'ADHOC' AS RecordStatus
FROM
	EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
WHERE
	(
		(EngMat_Enrolment_InYear.LearningAimRef = @SearchCode)
	)
    AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
	AND OGP_Group.RecordStatus = 'Adhoc'
	AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
--	AND OGP_Enrolment.RecordStatus = 'Adhoc'
	AND EngMat_Enrolment_InYear.EngMatType = @EngMatType
) union_query
ORDER BY 
	4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              D E P A R T M E N T
--****************************************************************************************
IF @SearchType IN ('DEPARTMENT', 'DEPT') 
BEGIN

SELECT TOP (@MaxRecords) * FROM
(
SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    EngMat_Enrolment_InYear.TeachingGroupCode, 
	EngMat_Enrolment_InYear.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3, 
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'IMPORTED' AS RecordStatus
FROM
    EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = @EngMatType AND 
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EngMat_Enrolment_InYear.CollegeStructure = @SearchCode
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType

UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
	OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3,
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'ADHOC' AS RecordStatus
FROM
	EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
WHERE
	EngMat_Enrolment_InYear.CollegeStructure = @SearchCode
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType
) union_query
ORDER BY 
	4,5,3   -- Surname,Forename,StudentRef

END


--******************************************************************************************
--                        S T U D E N T  - only 1 row
--******************************************************************************************
IF @SearchType = 'STUDENT'
BEGIN
SELECT
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    EngMat_Enrolment_InYear.TeachingGroupCode, 
	EngMat_Enrolment_InYear.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,  /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus AS CompletionDescription, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3, 
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress,/*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'IMPORTED' AS RecordStatus
FROM
    EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EngMat_Enrolment_InYear.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = @EngMatType AND 
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	(
		(EngMat_Enrolment_InYear.StudentRef = @SearchCode) 
	)
AND 
	EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'
AND 
	EngMat_Enrolment_InYear.EngMatType = @EngMatType

UNION --UNION EngMat_Enrolment_InYear info from Enrolments in Adhoc Teaching Groups

SELECT
    EngMat_Enrolment_InYear.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EngMat_Enrolment_InYear.StudentRef, 
	EngMat_Enrolment_InYear.Surname, 
	EngMat_Enrolment_InYear.Forenames, 
	EngMat_Enrolment_InYear.AgeOn31Aug, 
	EngMat_Enrolment_InYear.Gender, 
	EngMat_Enrolment_InYear.Ethnicity, 
	EngMat_Enrolment_InYear.DOB,
	EngMat_Enrolment_InYear.EngMatType, /*Instead of VA_Type, We have EngMatType which is 'English' or 'Maths'*/
	EngMat_Enrolment_InYear.OutcomeDescription,
	EngMat_Enrolment_InYear.OutcomeID,
	EngMat_Enrolment_InYear.CollegeStructure,
	EngMat_Enrolment_InYear.CurrentYear,
	EngMat_Enrolment_InYear.StartDate, 
	EngMat_Enrolment_InYear.PlannedEndDate, 
	EngMat_Enrolment_InYear.ActualEndDate, 
	EngMat_Enrolment_InYear.PriorAttainment_KS4,
	EngMat_Enrolment_InYear.StartQOE_HighestGrade,
	EngMat_Enrolment_InYear.StartQOE_HighestQualType,
	EngMat_Enrolment_InYear.StartInfo,
	EngMat_Enrolment_InYear.WDNumDaysAfterStart,
	EngMat_Enrolment_InYear.CappedPoints, 
	EngMat_Enrolment_InYear.Approved,
	--EngMat_Enrolment_InYear.Size, n/a
	--EngMat_Enrolment_InYear.Duration,  n/a
	--EngMat_Enrolment_InYear.Cohort,  n/a
	EngMat_Enrolment_InYear.NotionalNVQLevel, /*NotionalNVQLevel replaces NVQLevel*/
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, 
	OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EngMat_Enrolment_InYear.CourseCode, 
	EngMat_Enrolment_InYear.CourseTitle, 
	EngMat_Enrolment_InYear.LearningAimRef, 
	EngMat_Enrolment_InYear.LearningAimRefTitle AS LearningAimTitle,   /*LearningAimRefTitle instead of LearningAimTitle*/
	--EngMat_Enrolment_InYear.Qualification,  n/a
	--EngMat_Enrolment_InYear.QualificationCodeandName, n/a
	EngMat_Enrolment_InYear.MostRecentIYGrade, /* MostRecentIYGrade instead of IYMostRecentGrade*/
	 --EngMat_Enrolment_InYear.IYMostRecentGradeNo, --n/a
	 EngMat_Enrolment_InYear.MostRecentIYPoints, --added (The Points the IY Grade is equivalent to)
	--COALESCE (EngMat_Enrolment_InYear.QOEPoints_College2dp, EngMat_Enrolment_InYear.QOEPoints_GCSE_College2dp) AS QOEPoints,  Not Used
	EngMat_Enrolment_InYear.StartPoints, --added (Starting Points - i.e. QOE points)
	EngMat_Enrolment_InYear.StartPointsInfo, --added (Starting Point Info)
	EngMat_Enrolment_InYear.MaximumAvailablePoints, --added (The maximum number of points possible for this LearningAim)
	EngMat_Enrolment_InYear.MaxPotentialProgress, --added (The maximum Progress the student can make. i.e. MAxAvailablePoints - StartPoints)
	EngMat_Enrolment_InYear.TargetGrade, --added (The next grade up from the Starting Points)
	EngMat_Enrolment_InYear.TargetPoints, --added (The points that the Target Grade is worth)
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGrade,  --n/a.  We don't have a national target grade
	--EngMat_Enrolment_InYear.MostRecentCollegeEstGradeInflated,  --n/a.  Wwe don't have an inflated national target grade
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEGrade,
	EngMat_Enrolment_InYear.OGHighestPreviousGCSEPoints,
	EngMat_Enrolment_InYear.CompletionStatus, /*was CompletionDescription*/
	EngMat_Enrolment_InYear.CompletionID,
	EngMat_Enrolment_InYear.IYGrade1/*was Point1_Grade*/, EngMat_Enrolment_InYear.Point1_Notes, EngMat_Enrolment_InYear.IYPoints1,
	EngMat_Enrolment_InYear.IYGrade2/*was Point2_Grade*/, EngMat_Enrolment_InYear.Point2_Notes, EngMat_Enrolment_InYear.IYPoints2,
	EngMat_Enrolment_InYear.IYGrade3/*was Point3_Grade*/, EngMat_Enrolment_InYear.Point3_Notes, EngMat_Enrolment_InYear.IYPoints3,
	EngMat_Enrolment_InYear.IYGrade4/*was Point4_Grade*/, EngMat_Enrolment_InYear.Point4_Notes, EngMat_Enrolment_InYear.IYPoints4,
	EngMat_Enrolment_InYear.IYGrade5/*was Point5_Grade*/, EngMat_Enrolment_InYear.Point5_Notes, EngMat_Enrolment_InYear.IYPoints5,
	EngMat_Enrolment_InYear.IYGrade6/*was Point6_Grade*/, EngMat_Enrolment_InYear.Point6_Notes, EngMat_Enrolment_InYear.IYPoints6,
	EngMat_Enrolment_InYear.IYGrade7/*was Point7_Grade*/, EngMat_Enrolment_InYear.Point7_Notes, EngMat_Enrolment_InYear.IYPoints7,
	EngMat_Enrolment_InYear.IYGrade8/*was Point8_Grade*/, EngMat_Enrolment_InYear.Point8_Notes, EngMat_Enrolment_InYear.IYPoints8,
	EngMat_Enrolment_InYear.IYGrade9/*was Point9_Grade*/, EngMat_Enrolment_InYear.Point9_Notes, EngMat_Enrolment_InYear.IYPoints9,
	EngMat_Enrolment_InYear.IYGrade10/*was Point10_Grade*/, EngMat_Enrolment_InYear.Point10_Notes, EngMat_Enrolment_InYear.IYPoints10,
	EngMat_Enrolment_InYear.IYGrade11/*was Point11_Grade*/, EngMat_Enrolment_InYear.Point11_Notes, EngMat_Enrolment_InYear.IYPoints11,
	EngMat_Enrolment_InYear.IYGrade12/*was Point12_Grade*/, EngMat_Enrolment_InYear.Point12_Notes, EngMat_Enrolment_InYear.IYPoints12,
	EngMat_Enrolment_InYear.Point1_EffortDescription, 
	EngMat_Enrolment_InYear.Point2_EffortDescription, 
	EngMat_Enrolment_InYear.Point3_EffortDescription, 
	EngMat_Enrolment_InYear.Point4_EffortDescription, 
	EngMat_Enrolment_InYear.Point5_EffortDescription, 
	EngMat_Enrolment_InYear.Point6_EffortDescription, 
	EngMat_Enrolment_InYear.Point7_EffortDescription, 
	EngMat_Enrolment_InYear.Point8_EffortDescription, 
	EngMat_Enrolment_InYear.Point9_EffortDescription, 
	EngMat_Enrolment_InYear.Point10_EffortDescription, 
	EngMat_Enrolment_InYear.Point11_EffortDescription, 
	EngMat_Enrolment_InYear.Point12_EffortDescription, 
	EngMat_Enrolment_InYear.PersonalTargetGrade,
	EngMat_Enrolment_InYear.EnrolmentGrade,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EngMat_Enrolment_InYear.IYProgressMostRecent,
	--EngMat_Enrolment_InYear.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat, --n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,--n/a
	--EngMat_Enrolment_InYear.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,--n/a
	EngMat_Enrolment_InYear.Progress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points*/
	EngMat_Enrolment_InYear.CappedProgress, /*This is the equivalent to the Value Added Score - it is the difference between Start Points and Final Points, but if negative, it can only be -1*/
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText, --n/a
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,--n/a
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo--n/a
	'ADHOC' AS RecordStatus
FROM
	EngMat_Enrolment_InYear
		INNER JOIN Course ON EngMat_Enrolment_InYear.CourseCode = Course.CourseCode AND EngMat_Enrolment_InYear.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EngMat_Enrolment_InYear.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID AND OGP_Group.OGP_TypeCode = @EngMatType 
WHERE
	(
		(EngMat_Enrolment_InYear.StudentRef = @SearchCode) 
	)
    AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID
      --For now, all records in these 3 tables will be adhoc and created by manual data entry through OneGrade Plus
	AND OGP_Group.RecordStatus = 'Adhoc'
	AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'
--	AND OGP_Enrolment.RecordStatus = 'Adhoc'
	AND EngMat_Enrolment_InYear.EngMatType = @EngMatType

ORDER BY 
	4,5,3   -- Surname,Forename,StudentRef

END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsAnswers_Select]    Script Date: 02/05/2024 11:07:53 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsAnswers_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsAnswers_Select] AS' 
END
GO





ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsAnswers_Select]
  @QuestionID INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 16/03/2024 
-- Descripton:	SP to retrieve the Skills Answers (for a question)
-- Example:     exec sp_WebPlus_SkillsAnswers_Select 1
-- =============================================

SELECT 
  SkillsAnswer.ID,
  SkillsAnswer.Description,
  SkillsAnswer.IsObsolete,
  SkillsAnswer.Value,
  SkillsAnswer.SkillsAnswerTypeID
FROM 
  SkillsQuestion
    INNER JOIN SkillsAnswerType ON
	  SkillsQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
        INNER JOIN SkillsAnswer ON
	      SkillsAnswer.SkillsAnswerTypeID = SkillsAnswerType.ID
WHERE
  SkillsQuestion.ID = @QuestionID  
  --Note: we now filter out Obsolete in the Controller (special rules)
  --SkillsQuestion.IsObsolete = 0    AND
  --SkillsAnswer.IsObsolete = 0
ORDER BY
  SkillsAnswer.OrderBy

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsCourseAnswers_Select]    Script Date: 02/05/2024 11:07:53 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsCourseAnswers_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsCourseAnswers_Select] AS' 
END
GO






ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsCourseAnswers_Select]
  @QuestionID INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 16/03/2024 
-- Descripton:	SP to retrieve the Skills Answers (for a question)
-- Example:     exec sp_WebPlus_SkillsCourseAnswers_Select 1
-- =============================================

SELECT 
  SkillsAnswer.ID,
  SkillsAnswer.Description,
  SkillsAnswer.IsObsolete,
  SkillsAnswer.Value,
  SkillsAnswer.SkillsAnswerTypeID
FROM 
  SkillsCourseQuestion
    INNER JOIN SkillsAnswerType ON
	  SkillsCourseQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
        INNER JOIN SkillsAnswer ON
	      SkillsAnswer.SkillsAnswerTypeID = SkillsAnswerType.ID
WHERE
  SkillsCourseQuestion.ID = @QuestionID  
  --Note: we now filter out Obsolete in the Controller (special rules)
  --SkillsCourseQuestion.IsObsolete = 0    AND
  --SkillsAnswer.IsObsolete = 0
ORDER BY
  SkillsAnswer.OrderBy

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_VASkills_Select]    Script Date: 02/05/2024 11:07:54 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_VASkills_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_VASkills_Select] AS' 
END
GO



ALTER PROCEDURE [dbo].[sp_WebPlus_VASkills_Select]
@AcademicYearID   VARCHAR(5),
@SearchType       VARCHAR(11),   -- GROUP or COURSE or LEARNINGAIM or STUDENT or DEPARTMENT
@SearchCode       VARCHAR(50)

AS
-- ============================================================================
-- Author:		Andrew Breward
-- Create date: AndyB 14/03/2024 
-- Descripton:	SP to retrieve the Skills records for a GROUP or COURSE or LEARNINGAIM or DEPT
-- Example:     exec sp_WebPlus_VASkills_Select '22/23', 'GROUP', '28038W2 28038W2_GpC'
--              exec sp_WebPlus_VASkills_Select '23/24', 'GROUP', '29462W2 29462W2_GpAG'
-- Modified:	 
--
-- ====================================================================================

DECLARE @MaxRecords INT;
SET @MaxRecords = (SELECT 
                     IsNull(SystemSettingValue, DefaultValue) AS SystemSettingValue   
				   FROM 
				     SystemSettingValue 
				   WHERE 
				     SystemSettingName = 'WebPlusMaxAllowedStudentsGrid');
IF IsNull(@MaxRecords, 0) <= 0 SET @MaxRecords = 1000;

Print 'Max Records: ' + STR(@MaxRecords);
Print 'SearchType: ' + @SearchType;


--****************************************************************************************
--                              G R O U P
--****************************************************************************************
IF @SearchType = 'GROUP' 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA1 WHERE vOSA1.CourseID = Course.ID AND vOSA1.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA1.SkillsPeriodDescription = 'Period01') AS AvgAnswerValue01,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA2 WHERE vOSA2.CourseID = Course.ID AND vOSA2.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA2.SkillsPeriodDescription = 'Period02') AS AvgAnswerValue02,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA3 WHERE vOSA3.CourseID = Course.ID AND vOSA3.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA3.SkillsPeriodDescription = 'Period03') AS AvgAnswerValue03,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA4 WHERE vOSA4.CourseID = Course.ID AND vOSA4.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA4.SkillsPeriodDescription = 'Period04') AS AvgAnswerValue04,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA5 WHERE vOSA5.CourseID = Course.ID AND vOSA5.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA5.SkillsPeriodDescription = 'Period05') AS AvgAnswerValue05,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA6 WHERE vOSA6.CourseID = Course.ID AND vOSA6.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA6.SkillsPeriodDescription = 'Period06') AS AvgAnswerValue06,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA7 WHERE vOSA7.CourseID = Course.ID AND vOSA7.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA7.SkillsPeriodDescription = 'Period07') AS AvgAnswerValue07,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA8 WHERE vOSA8.CourseID = Course.ID AND vOSA8.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA8.SkillsPeriodDescription = 'Period08') AS AvgAnswerValue08,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA9 WHERE vOSA9.CourseID = Course.ID AND vOSA9.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA9.SkillsPeriodDescription = 'Period09') AS AvgAnswerValue09,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA10 WHERE vOSA10.CourseID = Course.ID AND vOSA10.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA10.SkillsPeriodDescription = 'Period10') AS AvgAnswerValue10,
	--
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA1 WHERE vOSA1.CourseID = Course.ID AND vOSA1.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA1.SkillsPeriodDescription = 'Period01') AS CountOfAnswers01,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA2 WHERE vOSA2.CourseID = Course.ID AND vOSA2.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA2.SkillsPeriodDescription = 'Period02') AS CountOfAnswers02,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA3 WHERE vOSA3.CourseID = Course.ID AND vOSA3.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA3.SkillsPeriodDescription = 'Period03') AS CountOfAnswers03,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA4 WHERE vOSA4.CourseID = Course.ID AND vOSA4.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA4.SkillsPeriodDescription = 'Period04') AS CountOfAnswers04,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA5 WHERE vOSA5.CourseID = Course.ID AND vOSA5.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA5.SkillsPeriodDescription = 'Period05') AS CountOfAnswers05,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA6 WHERE vOSA6.CourseID = Course.ID AND vOSA6.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA6.SkillsPeriodDescription = 'Period06') AS CountOfAnswers06,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA7 WHERE vOSA7.CourseID = Course.ID AND vOSA7.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA7.SkillsPeriodDescription = 'Period07') AS CountOfAnswers07,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA8 WHERE vOSA8.CourseID = Course.ID AND vOSA8.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA8.SkillsPeriodDescription = 'Period08') AS CountOfAnswers08,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA9 WHERE vOSA9.CourseID = Course.ID AND vOSA9.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA9.SkillsPeriodDescription = 'Period09') AS CountOfAnswers09,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA10 WHERE vOSA10.CourseID = Course.ID AND vOSA10.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA10.SkillsPeriodDescription = 'Period10') AS CountOfAnswers10,
	--
	'IMPORTED' AS RecordStatus

FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID

WHERE 
	EstActVA.TeachingGroupCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	--vSkillsOverallStudentAnswer.CountOfAnswers      AS OverallCountOfAnswers, 
	--vSkillsOverallStudentAnswer.AvgAnswerValue      AS OverallAvgAnswers,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
    --
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
	--
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA1 WHERE vOSA1.CourseID = Course.ID AND vOSA1.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA1.SkillsPeriodDescription = 'Period01') AS AvgAnswerValue01,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA2 WHERE vOSA2.CourseID = Course.ID AND vOSA2.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA2.SkillsPeriodDescription = 'Period02') AS AvgAnswerValue02,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA3 WHERE vOSA3.CourseID = Course.ID AND vOSA3.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA3.SkillsPeriodDescription = 'Period03') AS AvgAnswerValue03,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA4 WHERE vOSA4.CourseID = Course.ID AND vOSA4.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA4.SkillsPeriodDescription = 'Period04') AS AvgAnswerValue04,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA5 WHERE vOSA5.CourseID = Course.ID AND vOSA5.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA5.SkillsPeriodDescription = 'Period05') AS AvgAnswerValue05,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA6 WHERE vOSA6.CourseID = Course.ID AND vOSA6.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA6.SkillsPeriodDescription = 'Period06') AS AvgAnswerValue06,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA7 WHERE vOSA7.CourseID = Course.ID AND vOSA7.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA7.SkillsPeriodDescription = 'Period07') AS AvgAnswerValue07,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA8 WHERE vOSA8.CourseID = Course.ID AND vOSA8.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA8.SkillsPeriodDescription = 'Period08') AS AvgAnswerValue08,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA9 WHERE vOSA9.CourseID = Course.ID AND vOSA9.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA9.SkillsPeriodDescription = 'Period09') AS AvgAnswerValue09,
	--(SELECT AvgAnswerValue FROM vSkillsOverallStudentAnswer vOSA10 WHERE vOSA10.CourseID = Course.ID AND vOSA10.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA10.SkillsPeriodDescription = 'Period10') AS AvgAnswerValue10,
	--
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA1 WHERE vOSA1.CourseID = Course.ID AND vOSA1.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA1.SkillsPeriodDescription = 'Period01') AS CountOfAnswers01,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA2 WHERE vOSA2.CourseID = Course.ID AND vOSA2.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA2.SkillsPeriodDescription = 'Period02') AS CountOfAnswers02,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA3 WHERE vOSA3.CourseID = Course.ID AND vOSA3.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA3.SkillsPeriodDescription = 'Period03') AS CountOfAnswers03,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA4 WHERE vOSA4.CourseID = Course.ID AND vOSA4.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA4.SkillsPeriodDescription = 'Period04') AS CountOfAnswers04,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA5 WHERE vOSA5.CourseID = Course.ID AND vOSA5.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA5.SkillsPeriodDescription = 'Period05') AS CountOfAnswers05,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA6 WHERE vOSA6.CourseID = Course.ID AND vOSA6.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA6.SkillsPeriodDescription = 'Period06') AS CountOfAnswers06,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA7 WHERE vOSA7.CourseID = Course.ID AND vOSA7.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA7.SkillsPeriodDescription = 'Period07') AS CountOfAnswers07,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA8 WHERE vOSA8.CourseID = Course.ID AND vOSA8.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA8.SkillsPeriodDescription = 'Period08') AS CountOfAnswers08,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA9 WHERE vOSA9.CourseID = Course.ID AND vOSA9.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA9.SkillsPeriodDescription = 'Period09') AS CountOfAnswers09,
	--(SELECT CountOfAnswers FROM vSkillsOverallStudentAnswer vOSA10 WHERE vOSA10.CourseID = Course.ID AND vOSA10.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND vOSA10.SkillsPeriodDescription = 'Period10') AS CountOfAnswers10,
    --
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsStudentOnlyAnswer_CountPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE
	OGP_Group.OGP_GroupCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              C O U R S E
--****************************************************************************************
IF @SearchType = 'COURSE' 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
--	vSkillsOverallStudentAnswer.CountOfAnswers      AS OverallCountOfAnswers, 
--	vSkillsOverallStudentAnswer.AvgAnswerValue      AS OverallAvgAnswers,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE 
	EstActVA.CourseCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE
	EstActVA.CourseCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              L E A R N I N G   A I M
--****************************************************************************************
IF @SearchType IN ('LEARNINGAIM', 'LEARN') 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE 
	EstActVA.LearningAimRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE
	EstActVA.LearningAimRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              D E P A R T M E N T
--****************************************************************************************
IF @SearchType IN ('DEPARTMENT', 'DEPT') 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'IMPORTED' AS RecordStatus

FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE 
	EstActVA.CollegeStructure = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Records

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE
	EstActVA.CollegeStructure = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--******************************************************************************************
--                        S T U D E N T  - only 1 row
--******************************************************************************************
IF @SearchType = 'STUDENT' 
BEGIN
SELECT
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE 
	EstActVA.StudentRef = @SearchCode 
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, 
	EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	--dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	--dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	--dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	(SELECT Count(ID) FROM SkillsCourseQuestion SCQ WHERE SCQ.CourseID = Course.ID AND SCQ.IsObsolete = 0) AS CountOfSkillsCourseQuestion,
	--
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period01 AS CourseAvg_Period01,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period02 AS CourseAvg_Period02,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period03 AS CourseAvg_Period03,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period04 AS CourseAvg_Period04,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period05 AS CourseAvg_Period05,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period06 AS CourseAvg_Period06,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period07 AS CourseAvg_Period07,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period08 AS CourseAvg_Period08,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period09 AS CourseAvg_Period09,
	vSkillsCourseStudentOnlyAnswer_AvgPivot.Period10 AS CourseAvg_Period10,
	--
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period01 AS CourseCt_Period01,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period02 AS CourseCt_Period02,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period03 AS CourseCt_Period03,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period04 AS CourseCt_Period04,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period05 AS CourseCt_Period05,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period06 AS CourseCt_Period06,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period07 AS CourseCt_Period07,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period08 AS CourseCt_Period08,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period09 AS CourseCt_Period09,
	vSkillsCourseStudentOnlyAnswer_CountPivot.Period10 AS CourseCt_Period10,
	--
	vSkillsStudentOnlyAnswer_AvgPivot.Period01 AS StudentAvg_Period01,
	vSkillsStudentOnlyAnswer_AvgPivot.Period02 AS StudentAvg_Period02,
	vSkillsStudentOnlyAnswer_AvgPivot.Period03 AS StudentAvg_Period03,
	vSkillsStudentOnlyAnswer_AvgPivot.Period04 AS StudentAvg_Period04,
	vSkillsStudentOnlyAnswer_AvgPivot.Period05 AS StudentAvg_Period05,
	vSkillsStudentOnlyAnswer_AvgPivot.Period06 AS StudentAvg_Period06,
	vSkillsStudentOnlyAnswer_AvgPivot.Period07 AS StudentAvg_Period07,
	vSkillsStudentOnlyAnswer_AvgPivot.Period08 AS StudentAvg_Period08,
	vSkillsStudentOnlyAnswer_AvgPivot.Period09 AS StudentAvg_Period09,
	vSkillsStudentOnlyAnswer_AvgPivot.Period10 AS StudentAvg_Period10,
	--
	vSkillsStudentOnlyAnswer_CountPivot.Period01 AS StudentCt_Period01,
	vSkillsStudentOnlyAnswer_CountPivot.Period02 AS StudentCt_Period02,
	vSkillsStudentOnlyAnswer_CountPivot.Period03 AS StudentCt_Period03,
	vSkillsStudentOnlyAnswer_CountPivot.Period04 AS StudentCt_Period04,
	vSkillsStudentOnlyAnswer_CountPivot.Period05 AS StudentCt_Period05,
	vSkillsStudentOnlyAnswer_CountPivot.Period06 AS StudentCt_Period06,
	vSkillsStudentOnlyAnswer_CountPivot.Period07 AS StudentCt_Period07,
	vSkillsStudentOnlyAnswer_CountPivot.Period08 AS StudentCt_Period08,
	vSkillsStudentOnlyAnswer_CountPivot.Period09 AS StudentCt_Period09,
	vSkillsStudentOnlyAnswer_CountPivot.Period10 AS StudentCt_Period10,
	--
	vSkillsOverallStudentAnswer_AvgPivot.Period01 AS AvgAnswerValue01,
	vSkillsOverallStudentAnswer_AvgPivot.Period02 AS AvgAnswerValue02,
	vSkillsOverallStudentAnswer_AvgPivot.Period03 AS AvgAnswerValue03,
	vSkillsOverallStudentAnswer_AvgPivot.Period04 AS AvgAnswerValue04,
	vSkillsOverallStudentAnswer_AvgPivot.Period05 AS AvgAnswerValue05,
	vSkillsOverallStudentAnswer_AvgPivot.Period06 AS AvgAnswerValue06,
	vSkillsOverallStudentAnswer_AvgPivot.Period07 AS AvgAnswerValue07,
	vSkillsOverallStudentAnswer_AvgPivot.Period08 AS AvgAnswerValue08,
	vSkillsOverallStudentAnswer_AvgPivot.Period09 AS AvgAnswerValue09,
	vSkillsOverallStudentAnswer_AvgPivot.Period10 AS AvgAnswerValue10,
	--
	vSkillsOverallStudentAnswer_CountPivot.Period01 AS CountOfAnswers01,
	vSkillsOverallStudentAnswer_CountPivot.Period02 AS CountOfAnswers02,
	vSkillsOverallStudentAnswer_CountPivot.Period03 AS CountOfAnswers03,
	vSkillsOverallStudentAnswer_CountPivot.Period04 AS CountOfAnswers04,
	vSkillsOverallStudentAnswer_CountPivot.Period05 AS CountOfAnswers05,
	vSkillsOverallStudentAnswer_CountPivot.Period06 AS CountOfAnswers06,
	vSkillsOverallStudentAnswer_CountPivot.Period07 AS CountOfAnswers07,
	vSkillsOverallStudentAnswer_CountPivot.Period08 AS CountOfAnswers08,
	vSkillsOverallStudentAnswer_CountPivot.Period09 AS CountOfAnswers09,
	vSkillsOverallStudentAnswer_CountPivot.Period10 AS CountOfAnswers10,
    --
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_AvgPivot ON
					vSkillsCourseStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_AvgPivot.CourseID = Course.ID
				LEFT JOIN vSkillsCourseStudentOnlyAnswer_CountPivot ON
					vSkillsCourseStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND
					vSkillsCourseStudentOnlyAnswer_CountPivot.CourseID = Course.ID
				LEFT JOIN vSkillsStudentOnlyAnswer_AvgPivot ON
					vSkillsStudentOnlyAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsStudentOnlyAnswer_CountPivot ON
					vSkillsStudentOnlyAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID
				LEFT JOIN vSkillsOverallStudentAnswer_AvgPivot ON
					vSkillsOverallStudentAnswer_AvgPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_AvgPivot.AcademicYearID = @AcademicYearID
				LEFT JOIN vSkillsOverallStudentAnswer_CountPivot ON
					vSkillsOverallStudentAnswer_CountPivot.OGP_StudentID = OGP_Enrolment.OGP_StudentID AND 
					vSkillsOverallStudentAnswer_CountPivot.AcademicYearID = @AcademicYearID
WHERE
	EstActVA.StudentRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'

ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END



GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsPeriods_Select]    Script Date: 02/05/2024 11:07:54 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsPeriods_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsPeriods_Select] AS' 
END
GO





ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsPeriods_Select]
  @AcademicYearID   VARCHAR(5)
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 11/03/2024 
-- Descripton:	SP to retrieve the Skills Periods for the selected Year
-- Example:     exec sp_WebPlus_SkillsPeriods_Select '23/24'
-- =============================================

SELECT 
  *
FROM 
  SkillsPeriod
WHERE
  AcademicYearID  = @AcademicYearID
ORDER BY
  DefaultDescription  -- we removed OrderBy

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_VAStudents_Select]    Script Date: 02/05/2024 11:07:55 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_VAStudents_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_VAStudents_Select] AS' 
END
GO






ALTER PROCEDURE [dbo].[sp_WebPlus_VAStudents_Select]
@AcademicYearID   VARCHAR(5),
@SearchType       VARCHAR(11),   -- GROUP or COURSE or LEARNINGAIM or STUDENT or DEPARTMENT
@SearchCode       VARCHAR(50)

AS
-- ============================================================================
-- Author:		Andrew Breward
-- Create date: AndyB 11/12/2022 v1.0.0
-- Descripton:	SP to retrieve the Students for a GROUP or COURSE or LEARNINGAIM
-- Example:     exec sp_WebPlus_VAStudents_Select '22/23', 'GROUP', '28038W2 28038W2_GpC'
-- Modified:	AndyG 30/07/2023 Split the SQL into separate sections for Group, Course etc (OR statements were imacting performance, so each SearchType now treated separately)
--              AndyB 01/11/2023 Added CountOfMappedQOE
--              AndyB 14/11/2023 Added: EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget
--                               Added: EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget
--              AndyB 07/12/2023 Added: EstActVA.CollegeStructure, EstActVA.MostRecentNationalDataYear, EstActVA.MostRecentCollegeEstPoints2dp
--              AndyB 24/02/2024 Added: Joins and Fields to: 
--                                        vSkillsCourseStudentOnlyAnswer_AvgPivot 
--                                        vSkillsCourseStudentOnlyAnswer_CountPivot 
--                                        vSkillsStudentOnlyAnswer_AvgPivot 
--                                        vSkillsStudentOnlyAnswer_CountPivot
--                                        CountOfSkillsCourseQuestion
--              AndyB 09/03/2024 Added:   TOP (@MaxRecords)
--                               Added:   Department SearchType
--                               Removed: Skills (moved to separate SP) 
-- 
-- ================================================================================================================
-- Note: No need to duplicate changes in sp_WebPlus_DepartmentStudents_Select now (this SP now handles Departments)
-- ================================================================================================================

DECLARE @MaxRecords INT;
SET @MaxRecords = (SELECT 
                     IsNull(SystemSettingValue, DefaultValue) AS SystemSettingValue   
				   FROM 
				     SystemSettingValue 
				   WHERE 
				     SystemSettingName = 'WebPlusMaxAllowedStudentsGrid');
IF IsNull(@MaxRecords, 0) <= 0 SET @MaxRecords = 1000;

Print 'Max Records: ' + STR(@MaxRecords);
Print 'SearchType: ' + @SearchType;


--****************************************************************************************
--                              G R O U P
--****************************************************************************************
IF @SearchType = 'GROUP' 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'IMPORTED' AS RecordStatus

FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EstActVA.TeachingGroupCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
WHERE
	OGP_Group.OGP_GroupCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              C O U R S E
--****************************************************************************************
IF @SearchType = 'COURSE' 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EstActVA.CourseCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
WHERE
	EstActVA.CourseCode = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              L E A R N I N G   A I M
--****************************************************************************************
IF @SearchType IN ('LEARNINGAIM', 'LEARN') 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EstActVA.LearningAimRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
WHERE
	EstActVA.LearningAimRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--****************************************************************************************
--                              D E P A R T M E N T
--****************************************************************************************
IF @SearchType IN ('DEPARTMENT', 'DEPT') 
BEGIN

SELECT TOP (@MaxRecords) * FROM
  (
  SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'IMPORTED' AS RecordStatus

FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EstActVA.CollegeStructure = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Records

SELECT TOP (@MaxRecords)
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget, 
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
WHERE
	EstActVA.CollegeStructure = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'
) union_query
ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END


--******************************************************************************************
--                        S T U D E N T  - only 1 row
--******************************************************************************************
IF @SearchType = 'STUDENT' 
BEGIN
SELECT
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
    EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    EstActVA.TeachingGroupCode, EstActVA.TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'IMPORTED' AS RecordStatus
FROM
    EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.CourseID AND OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID  AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  -- added
				--INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				--	INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
				INNER JOIN OGP_Group ON (OGP_Group.OGP_GroupCode = EstActVA.TeachingGroupCode AND 
				                         OGP_Group.OGP_TypeCode = 'VA' AND
										 OGP_Group.CourseID = OGP_Enrolment.CourseID AND
										 OGP_Group.AcademicYearID = @AcademicYearID)
WHERE 
	EstActVA.StudentRef = @SearchCode 
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Enrolment.RecordStatus = 'Imported'

UNION --UNION EstActVA info from Enrolments in Adhoc Teaching Groups

SELECT
    EstActVA.ID, 
	OGP_Enrolment.ID AS EnrolmentID, 
	EstActVA.StudentRef, EstActVA.Surname, EstActVA.Forenames, EstActVA.AgeOn31Aug, EstActVA.Gender, EstActVA.Ethnicity, EstActVA.DOB,
	EstActVA.VA_Type, EstActVA.StartDate, EstActVA.PlannedEndDate, EstActVA.ActualEndDate, EstActVA.Size, EstActVA.Duration, EstActVA.Cohort, EstActVA.NVQLevel,
    OGP_Group.OGP_GroupCode AS TeachingGroupCode, OGP_Group.OGP_GroupTitle AS TeachingGroupTitle,
	OGP_Group.ID AS TeachingGroupID,
	Course.ID AS CourseID,
	EstActVA.CourseCode, EstActVA.CourseTitle, 
	EstActVA.LearningAimRef, EstActVA.LearningAimTitle,
	EstActVA.Qualification, EstActVA.QualificationDescription,
	EstActVA.IYMostRecentGrade, EstActVA.IYMostRecentGradeNo, 
	COALESCE (EstActVA.QOEPoints_College2dp, EstActVA.QOEPoints_GCSE_College2dp) AS QOEPoints, 
	EstActVA.CountOfMappedQOE,
	EstActVA.MostRecentNationalDataYear,
	EstActVA.MostRecentCollegeEstPoints2dp,
	EstActVA.MostRecentCollegeEstGrade, EstActVA.MostRecentCollegeEstGradeInflated,
	EstActVA.CompletionDescription,
	EstActVA.CollegeStructure,
	EstActVA.Point1_Grade, EstActVA.Point1_Notes, 
	EstActVA.Point2_Grade, EstActVA.Point2_Notes, 
	EstActVA.Point3_Grade, EstActVA.Point3_Notes, 
	EstActVA.Point4_Grade, EstActVA.Point4_Notes, 
	EstActVA.Point5_Grade, EstActVA.Point5_Notes, 
	EstActVA.Point6_Grade, EstActVA.Point6_Notes, 
	EstActVA.Point7_Grade, EstActVA.Point7_Notes,
	EstActVA.Point8_Grade, EstActVA.Point8_Notes,
	EstActVA.Point9_Grade, EstActVA.Point9_Notes,
	EstActVA.Point10_Grade, EstActVA.Point10_Notes,
	EstActVA.Point11_Grade, EstActVA.Point11_Notes,
	EstActVA.Point12_Grade, EstActVA.Point12_Notes,
	EstActVA.Point1_EffortDescription, 
	EstActVA.Point2_EffortDescription, 
	EstActVA.Point3_EffortDescription, 
	EstActVA.Point4_EffortDescription, 
	EstActVA.Point5_EffortDescription, 
	EstActVA.Point6_EffortDescription, 
	EstActVA.Point7_EffortDescription, 
	EstActVA.Point8_EffortDescription, 
	EstActVA.Point9_EffortDescription, 
	EstActVA.Point10_EffortDescription, 
	EstActVA.Point11_EffortDescription, 
	EstActVA.Point12_EffortDescription, 
	EstActVA.PersonalTargetGrade,
	EstActVA.EnrolmentGrade,
	EstActVA.MostRecentBelowTarget, EstActVA.MostRecentAboveTarget, EstActVA.MostRecentAtTarget,
	EstActVA.EnrolmentGradeBelowTarget, EstActVA.EnrolmentGradeAboveTarget, EstActVA.EnrolmentGradeAtTarget,
	EstActVA.IYMostRecent_vs_RecentTarget2dp AS InYearValueAdded,
	EstActVA.IYMostRecent_vs_RecentTarget_NationalBanding AS InYearValueAdddedvsNat,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent2dp AS FinalValueAdded,
	EstActVA.EnrolmentGradeVAScore_vs_MostRecent_NationalBanding AS FinalValueAddedvsNat,
	dbo.fn_WebPlusDetermineOriginOfQOEForOGPlus(EstActVA.ID) AS OriginOfQOEText,
	dbo.fn_WebPlusGetInyearValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, IYMostRecentGrade, IYMostRecentPoints, MostRecentCollegeEstPoints2dp, IYMostRecent_vs_RecentTarget2dp) AS InyearValueAddedPopupInfo,
	dbo.fn_WebPlusGetFinalValueAddedPopupInfo(VA_Type, Cohort, LearningAimRef, LearningAimTitle, Size, MostRecentNationalDataYear, MostRecentCollegeEstGrade, EnrolmentGrade, EnrolmentPoints, MostRecentCollegeEstPoints2dp, EnrolmentGradeVAScore_vs_MostRecent2dp) AS FinalValueAddedPopupInfo,
	--
	'ADHOC' AS RecordStatus
FROM
	EstActVA
		INNER JOIN Course ON EstActVA.CourseCode = Course.CourseCode AND EstActVA.AcademicYearID = Course.AcademicYearID
			INNER JOIN OGP_Enrolment ON Course.ID = OGP_Enrolment.OriginalCourseID AND EstActVA.StudentRef = OGP_Enrolment.StudentRef  --Link to OriginalCourseID because we want the Original VA (values, LAim, Course)
				INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
WHERE
	EstActVA.StudentRef = @SearchCode
AND 
	EstActVA.AcademicYearID = @AcademicYearID
AND 
	OGP_Group.RecordStatus = 'Adhoc'
AND 
	OGP_GroupEnrolment.RecordStatus = 'Adhoc'

ORDER BY 4,5,3   -- Surname,Forename,StudentRef

END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Course_Select]    Script Date: 02/05/2024 11:07:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Course_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Course_Select] AS' 
END
GO







ALTER PROCEDURE [dbo].[sp_WebPlus_Course_Select]
@AcademicYearID     VARCHAR(5),
@CourseID		    INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 23/03/2023 v1.0.0
-- Descripton:	SP to retrieve an Individual Learning Aim
-- Modified:    25/Feb/2024  AndyB  Added CourseTypeCode
-- Example:     exec sp_WebPlus_Course_Select '22/23', 5604
-- =============================================

SELECT 
	Course.*,
	(SELECT TOP 1 OGP_TypeCode from OGP_Group where OGP_Group.CourseID = Course.ID) AS CourseTypeCode
	--SQ.TotalStudentCount,
	--SQ.CountOfContinuer,
	--SQ.CountOfComplete,
	--SQ.CountOfWithdrawn,
	--SQ.CountOfTransfer
FROM 
	Course
		--LEFT JOIN 
		--	(SELECT 
		--		CourseID, 
		--		COUNT(ID) AS TotalStudentCount, 
		--		SUM(CASE WHEN CompletionID = 1 THEN 1 ELSE 0 END) AS CountOfContinuer, 
		--		SUM(CASE WHEN CompletionID = 2 THEN 1 ELSE 0 END) AS CountOfComplete, 
		--		SUM(CASE WHEN CompletionID IN (3,6) THEN 1 ELSE 0 END) AS CountOfWithdrawn, 
		--		SUM(CASE WHEN CompletionID = 4 THEN 1 ELSE 0 END) AS CountOfTransfer 
		--	FROM 
		--		Enrolment 
		--	WHERE 
		--		AcademicYearID = @AcademicYearID
		--	GROUP BY 
		--		CourseID
		--	) AS SQ 
		--ON Course.ID = SQ.CourseID 
WHERE 
	Course.ID = @CourseID;

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_Search_Select]    Script Date: 02/05/2024 11:07:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_Search_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_Search_Select] AS' 
END
GO





ALTER PROCEDURE [dbo].[sp_WebPlus_Search_Select]
@YearID         VARCHAR(5),
@SearchValue    VARCHAR(50),
@SearchVA       INT,
@SearchEnglish  INT,
@SearchMaths    INT,
@ResultsPerType INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 08/01/2023 
-- Modified:    AndyB 09/10/2023 Added StudentRef to the Student search
--              AndyB 10/10/2023 Added check for .RecordStatus != 'Obsolete'
--              AndyB 07/02/2024 Re-structured to improve performance - used multiple UNION instead of OR clauses 
--
-- Descripton:	SP to retrieve the Search results for ValueAdded
-- Examples:    exec sp_WebPlus_Search_Select '22/23', 'Smith', 'VA', 100
--              exec sp_WebPlus_Search_Select '22/23', '23364L0 EFBg', 'VA', 100
-- =============================================

  --Create temporary tables of the types of data (to eliminate the nulls)
  WITH 
    StudentsSubTable     AS (
	                         SELECT 
								OGP_Student.ID AS ID, @YearID AS AcademicYearID,
								OGP_Student.StudentRef, OGP_Student.Surname, OGP_Student.Forenames, OGP_Student.DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM 
								OGP_Student 
									INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = OGP_Student.ID 
										INNER JOIN OGP_GroupEnrolment ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
											INNER JOIN OGP_Group ON OGP_GroupEnrolment.OGP_GroupID =  OGP_Group.ID
							 WHERE 
								(OGP_Student.Surname LIKE @SearchValue) --OGP_Student.Surname IS NOT NULL AND  
							 AND 
								(OGP_Enrolment.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
							     OGP_Student.RecordStatus != 'Obsolete'
							 AND
							     OGP_Enrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_GroupEnrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_Group.RecordStatus != 'Obsolete'
                             
							 UNION

 	                         SELECT 
								OGP_Student.ID AS ID, @YearID AS AcademicYearID,
								OGP_Student.StudentRef, OGP_Student.Surname, OGP_Student.Forenames, OGP_Student.DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM 
								OGP_Student 
									INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = OGP_Student.ID 
										INNER JOIN OGP_GroupEnrolment ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
											INNER JOIN OGP_Group ON OGP_GroupEnrolment.OGP_GroupID =  OGP_Group.ID
							 WHERE 
								(OGP_Student.Forenames LIKE @SearchValue)  -- OGP_Student.Forenames IS NOT NULL AND  
							 AND 
								(OGP_Enrolment.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
							     OGP_Student.RecordStatus != 'Obsolete'
							 AND
							     OGP_Enrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_GroupEnrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_Group.RecordStatus != 'Obsolete'

							 UNION

	                         SELECT 
								OGP_Student.ID AS ID, @YearID AS AcademicYearID,
								OGP_Student.StudentRef, OGP_Student.Surname, OGP_Student.Forenames, OGP_Student.DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM 
								OGP_Student 
									INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = OGP_Student.ID 
										INNER JOIN OGP_GroupEnrolment ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
											INNER JOIN OGP_Group ON OGP_GroupEnrolment.OGP_GroupID =  OGP_Group.ID
							 WHERE 
								(OGP_Student.StudentRef LIKE @SearchValue)  -- OGP_Student.StudentRef IS NOT NULL AND  
							 AND 
								(OGP_Enrolment.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
							     OGP_Student.RecordStatus != 'Obsolete'
							 AND
							     OGP_Enrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_GroupEnrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_Group.RecordStatus != 'Obsolete'

						    ),
	CoursesSubTable      AS (SELECT DISTINCT 
								Course.ID, Course.AcademicYearID, 
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								CourseCode, Title AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM Course
								INNER JOIN OGP_Group ON Course.ID = OGP_Group.CourseID
							 WHERE
								(Course.CourseCode LIKE @SearchValue)  -- Course.CourseCode IS NOT NULL AND  
							 AND
							    (Course.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
							     OGP_Group.RecordStatus != 'Obsolete'

							UNION

                            SELECT DISTINCT 
								Course.ID, Course.AcademicYearID, 
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								CourseCode, Title AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM Course
								INNER JOIN OGP_Group ON Course.ID = OGP_Group.CourseID
							 WHERE
								(Course.Title LIKE @SearchValue)  -- Course.Title IS NOT NULL AND  
							 AND
							    (Course.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
							     OGP_Group.RecordStatus != 'Obsolete'
							),
	LearningAimsSubTable AS (SELECT DISTINCT
								0 AS ID, @YearID AS AcademicYearID,
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								LearningAim.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_EnrolmentStatus.OGP_TypeCode AS TypeCode,
								OGP_EnrolmentStatus.RecordStatus
							 FROM 
								OGP_Student 
									INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = OGP_Student.ID 
										INNER JOIN OGP_EnrolmentStatus ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
											INNER JOIN LearningAim ON OGP_EnrolmentStatus.LearningAimRef = LearningAim.LearningAimRef
							 WHERE 
									(LearningAim.LearningAimRef LIKE @SearchValue )  -- LearningAim.LearningAimRef IS NOT NULL AND  
							 AND
									(OGP_Student.AcademicYearID = @YearID) 
							 AND 
									(
									  (OGP_TypeCode = 'VA' AND @SearchVA = 1) 
									  OR
									  (OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
									  OR
									  (OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
									)
							 AND
							     OGP_Student.RecordStatus != 'Obsolete'
							 AND
							     OGP_Enrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_EnrolmentStatus.RecordStatus != 'Obsolete'

							UNION

                            SELECT DISTINCT
								0 AS ID, @YearID AS AcademicYearID,
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								LearningAim.LearningAimRef, LearningAim.LearningAimRefTitle AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								'' AS DepartmentName,
								OGP_EnrolmentStatus.OGP_TypeCode AS TypeCode,
								OGP_EnrolmentStatus.RecordStatus
							 FROM 
								OGP_Student 
									INNER JOIN OGP_Enrolment ON OGP_Enrolment.OGP_StudentID = OGP_Student.ID 
										INNER JOIN OGP_EnrolmentStatus ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
											INNER JOIN LearningAim ON OGP_EnrolmentStatus.LearningAimRef = LearningAim.LearningAimRef
							 WHERE 
									(LearningAim.LearningAimRefTitle LIKE @SearchValue)  -- LearningAim.LearningAimRefTitle IS NOT NULL AND  
							 AND
									(OGP_Student.AcademicYearID = @YearID) 
							 AND 
									(
									  (OGP_TypeCode = 'VA' AND @SearchVA = 1) 
									  OR
									  (OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
									  OR
									  (OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
									)
							 AND
							     OGP_Student.RecordStatus != 'Obsolete'
							 AND
							     OGP_Enrolment.RecordStatus != 'Obsolete'
							 AND
							     OGP_EnrolmentStatus.RecordStatus != 'Obsolete'

							),
	DepartmentsSubTable AS (SELECT DISTINCT
								0 AS ID, @YearID AS AcademicYearID,
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								'' AS CourseCode, '' AS CourseTitle, 
								'' AS TeachingGroupCode, '' AS TeachingGroupTitle,
								OGP_CollegeStructure.CollegeStructureName AS DepartmentName,
								OGP_Group.OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							FROM OGP_CollegeStructure
								INNER JOIN OGP_CollegeStructureGroup ON OGP_CollegeStructureGroup.OGP_CollegeStructureID = OGP_CollegeStructure.ID
									INNER JOIN OGP_Group ON OGP_CollegeStructureGroup.OGP_GroupID = OGP_Group.ID
							WHERE 
								(OGP_CollegeStructure.CollegeStructureName LIKE @SearchValue) --OGP_CollegeStructure.CollegeStructureName IS NOT NULL AND  
							AND
								(OGP_CollegeStructure.AcademicYearID = @YearID)
							AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							AND
								OGP_CollegeStructure.RecordStatus != 'Obsolete'
							AND
								OGP_CollegeStructureGroup.RecordStatus != 'Obsolete'
							AND
								OGP_Group.RecordStatus != 'Obsolete'
							),
	GroupsSubTable       AS (SELECT 
								OGP_Group.ID AS ID, @YearID AS AcademicYearID, 
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								Course.CourseCode AS CourseCode, Course.Title AS CourseTitle, 
								OGP_GroupCode AS TeachingGroupCode, OGP_GroupTitle AS TeachingGroupTitle, 
								'' AS DepartmentName,
								OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM 
								OGP_Group 
									INNER JOIN Course ON Course.ID = OGP_Group.CourseID
							 WHERE 
								(OGP_GroupCode LIKE @SearchValue)  -- OGP_GroupCode IS NOT NULL AND  
							 AND 
								(OGP_Group.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
								OGP_Group.RecordStatus != 'Obsolete'

							UNION

							SELECT 
								OGP_Group.ID AS ID, @YearID AS AcademicYearID, 
								'' AS StudentRef, '' AS Surname, '' AS Forenames, null AS DOB, 
								'' AS LearningAimRef, '' AS LearningAimTitle, 
								Course.CourseCode AS CourseCode, Course.Title AS CourseTitle, 
								OGP_GroupCode AS TeachingGroupCode, OGP_GroupTitle AS TeachingGroupTitle, 
								'' AS DepartmentName,
								OGP_TypeCode AS TypeCode,
								OGP_Group.RecordStatus
							 FROM 
								OGP_Group 
									INNER JOIN Course ON Course.ID = OGP_Group.CourseID
							 WHERE 
								(OGP_GroupTitle LIKE @SearchValue)  -- OGP_GroupTitle IS NOT NULL AND  
							 AND 
								(OGP_Group.AcademicYearID = @YearID) 
							 AND 
								(
								  (OGP_Group.OGP_TypeCode = 'VA' AND @SearchVA = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'Maths' AND @SearchMaths = 1) 
								  OR
								  (OGP_Group.OGP_TypeCode = 'English' AND @SearchEnglish = 1) 
								)
							 AND
								OGP_Group.RecordStatus != 'Obsolete'
							)
  --
  --Groups
SELECT TOP(@ResultsPerType)
    'GROUP' AS RowTypeInd, 1 AS SortOrder, StudentRef, RecordStatus,
	1 AS TeachingGroupMatchInd, 0 AS StudentMatchInd, 0 AS LearningAimMatchInd, 0 AS CourseMatchInd, 0 AS DepartmentMatchInd, 
	ID, AcademicYearID, Surname, Forenames, DOB, 
	LearningAimRef, LearningAimTitle, 
	CourseCode, CourseTitle, 
	TeachingGroupCode, TeachingGroupTitle, 
	TypeCode AS RowTypeCode, 
	'' AS DepartmentName
  FROM 
	GroupsSubTable
  --WHERE   
  --  (TeachingGroupCode like @SearchValue OR TeachingGroupTitle like @SearchValue )
UNION ALL
  --Students
  SELECT TOP(@ResultsPerType)
    'STUDENT' AS RowTypeInd, 2 AS SortOrder, StudentRef, RecordStatus,
	1 AS StudentMatchInd, 0 AS LearningAimMatchInd, 0 AS CourseMatchInd, 0 AS TeachingGroupMatchInd, 0 AS DepartmentMatchInd,
	ID, AcademicYearID, Surname, Forenames, DOB, 
	LearningAimRef, LearningAimTitle, 
	CourseCode, CourseTitle, 
	TeachingGroupCode, TeachingGroupTitle, 
	TypeCode AS RowTypeCode,  
	'' AS DepartmentName 
  FROM 
	StudentsSubTable
  --WHERE   
  --  (StudentRef like @SearchValue OR  Surname like @SearchValue OR Forenames like @SearchValue )
UNION ALL
  --LearningAim
  SELECT TOP(@ResultsPerType)
    'LEARNINGAIM' AS RowTypeInd, 3 AS SortOrder, StudentRef, RecordStatus, 
	0 AS StudentMatchInd, 1 AS LearningAimMatchInd, 0 AS CourseMatchInd, 0 AS TeachingGroupMatchInd, 0 AS DepartmentMatchInd,
	ID, AcademicYearID, Surname, Forenames, DOB, 
	LearningAimRef, LearningAimTitle, 
	CourseCode, CourseTitle, 
	TeachingGroupCode, TeachingGroupTitle, 
	TypeCode AS RowTypeCode, 
	'' AS DepartmentName 
  FROM 
	LearningAimsSubTable
  --WHERE   
  --  (LearningAimRef like @SearchValue OR LearningAimTitle like @SearchValue )
UNION ALL
  --Departments
  SELECT TOP(@ResultsPerType)
    'DEPARTMENT' AS RowTypeInd, 4 AS SortOrder, 
	DepartmentName AS StudentRef,                        -- for sort order
	RecordStatus,
	0 AS StudentMatchInd, 0 AS LearningAimMatchInd, 0 AS CourseMatchInd, 0 AS TeachingGroupMatchInd, 1 AS DepartmentMatchInd,
	ID, AcademicYearID, Surname, Forenames, DOB, 
	LearningAimRef, LearningAimTitle, 
	CourseCode, CourseTitle, 
	TeachingGroupCode, TeachingGroupTitle, 
	TypeCode AS RowTypeCode,  
	DepartmentName 
  FROM 
	DepartmentsSubTable
  --WHERE   
  --  (DepartmentName like @SearchValue)
UNION ALL
  --Courses
  SELECT TOP(@ResultsPerType)
    'COURSE' AS RowTypeInd, 5 AS SortOrder, StudentRef, RecordStatus,
	0 AS StudentMatchInd, 0 AS LearningAimMatchInd, 1 AS CourseMatchInd, 0 AS TeachingGroupMatchInd, 0 AS DepartmentMatchInd, 
	ID, AcademicYearID, Surname, Forenames, DOB, 
	LearningAimRef, LearningAimTitle, 
	CourseCode, CourseTitle, 
	TeachingGroupCode, TeachingGroupTitle, 
	TypeCode AS RowTypeCode,  
	'' AS DepartmentName 
  FROM 
	CoursesSubTable
  --WHERE   
  --  (CourseCode like @SearchValue OR CourseTitle like @SearchValue ) 

  -- SortOrder, StudentRef
  ORDER BY 2,3   

GO


/****** Object:  StoredProcedure [dbo].[sp_WebPlus_StaffAssignedToTeachinggroup_Select]    Script Date: 12/05/2024 09:35:47 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_StaffAssignedToTeachinggroup_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_StaffAssignedToTeachinggroup_Select] AS' 
END
GO

ALTER PROCEDURE [dbo].[sp_WebPlus_StaffAssignedToTeachinggroup_Select]
@AcademicYearID VARCHAR(5),
@GroupID integer

AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 31/1/2023 
-- Modified:    AndyB 10/10/2023 Added check for .RecordStatus != 'Obsolete'
--              AndyB 12/05/2024 Added columns: Forenames, IsOwner
--
-- Descripton:	SP to retrieve the Staff assigned to a TeachingGroup
-- Example:     exec sp_WebPlus_StaffAssignedToTeachinggroup_Select '22/23', 7
-- =============================================

SELECT 
	OGP_GroupStaff.ID, 
	OGP_GroupStaff.StaffID,
	Staff.Surname,
	Staff.Forenames,
	CASE WHEN IsNull(OGP_Group.Owner_StaffID, -1) = IsNull(OGP_GroupStaff.StaffID, -2) THEN 1 ELSE 0 END AS IsOwner
FROM 
	OGP_GroupStaff 
	  INNER JOIN Staff ON OGP_GroupStaff.StaffID = Staff.StaffID
      INNER JOIN OGP_Group ON OGP_GroupStaff.OGP_GroupID = OGP_Group.ID
			INNER JOIN Course ON OGP_Group.CourseID = Course.ID
WHERE 
	Course.AcademicYearID = @AcademicYearID 
AND  
	OGP_GroupStaff.OGP_GroupID = @GroupID
AND
	OGP_GroupStaff.RecordStatus != 'Obsolete'
ORDER BY 
    3,4  -- surname,forename
GO


/****** Object:  StoredProcedure [dbo].[sp_WebPlus_StaffUser_Select]    Script Date: 20/05/2024 14:49:50 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_StaffUser_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_StaffUser_Select] AS' 
END
GO


ALTER PROCEDURE [dbo].[sp_WebPlus_StaffUser_Select]
    @username VARCHAR(50)
AS
-- ===============================================================
-- Author:		Andrew Breward
-- Create date: AndyB 15/01/2023 
-- Modified:    AndyB 20/05/2024 removed TOP 1 in order to cater for Staff with multiple PermissionGroupUser records e.g. Standard,Administrator
-- Descripton:	SP to retrieve the User details (joined to Staff and Permissions tables)
-- Example:     exec sp_WebPlus_UserStaff_Select 'AndyB'
-- ===============================================================

	SELECT 
		u.UserID, u.Title, u.Username, u.Forenames, u.Surname, u.EmailAddress, u.Mobiletelephone, u.Enabled AS UserEnabled, u.Password, u.PermissionGroupTypeID, 
		s.StaffID, s.StaffCode, s.EmailAddress AS StaffEmail, s.Enabled AS StaffEnabled,
		pgt.PermissionGroupTypeName, 
		pgu.PermissionGroupUserID, pgu.PermissionGroupID, 
		pg.PermissionGroupName
    FROM
        [User] u
    LEFT OUTER JOIN
		[Staff] s ON u.UserID = s.UserID AND s.Enabled = 1   -- this is to make sure the staff record exists and is enabled
	LEFT OUTER JOIN
		[PermissionGroupType] pgt ON u.PermissionGroupTypeID = pgt.PermissionGroupTypeID
	LEFT OUTER JOIN
		[PermissionGroupUser] pgu ON u.UserID = pgu.UserID
	LEFT OUTER JOIN
		[PermissionGroup] pg ON pgu.PermissionGroupID= pg.PermissionGroupID
    WHERE
		u.username = @username
	ORDER BY 
	    pgu.PermissionGroupUserID DESC;  -- so we get the latest if > 1 
GO


/****** Object:  StoredProcedure [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]    Script Date: 20/05/2024 16:09:32 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select] AS' 
END
GO


ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]
  @CourseID             INT,
  @StudentID            INT,
  @SkillsPeriodID		INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 26/03/2024 
-- Modified:    AndyB 20/05/2024 Added 'SkillsCourseStudentAnswer.CourseID = @CourseID' to WHERE clause   
-- Descripton:	SP to retrieve the Skills Questions and Answers for a Student and Period and Course
-- Example:     exec sp_WebPlus_SkillsStudentCourseQuestions_Select 5399, 44339, 1
-- =============================================

SELECT 
  SkillsCourseQuestion.ID                   AS QuestionID, 
  SkillsCourseQuestion.Description          AS QuestionDescription, 
  SkillsCourseQuestion.IsObsolete           AS QuestionIsObsolete, 
  SkillsAnswer.Description                  AS AnswerDescription,
  SkillsAnswer.IsObsolete                   AS AnswerIsObsolete,
  SkillsAnswerType.ID                       AS AnswerTypeID, 
  SkillsAnswerType.Description              AS AnswerTypeDescription, 
  SkillsAnswerType.IsObsolete               AS AnswerTypeIsObsolete,
  SkillsCourseStudentAnswer.ID              AS StudentAnswerID, 
  SkillsCourseStudentAnswer.AnswerText      AS AnswerText,
  SkillsCourseStudentAnswer.SkillsAnswerID  AS AnswerID, 
  SkillsPeriod.ID                           AS PeriodID, 
  SkillsPeriod.AcademicYearID               AS PeriodAcademicYearID, 
  SkillsPeriod.DefaultDescription           AS PeriodDefaultDescription, 
  SkillsPeriod.SkillsPeriodDescription      AS PeriodDescription, 
  SkillsPeriod.IsEditable                   AS PeriodIsEditable,  
  SkillsPeriod.ShowByDefaultOpenDate        AS PeriodOpenDate, 
  SkillsPeriod.ShowByDefaultCloseDate       AS PeriodCloseDate,
  SkillsCourseStudentAnswer.UpdatedBy       AS UpdatedBy,
  SkillsCourseStudentAnswer.UpdatedWhen     AS UpdatedWhen,
  Usr.Forenames                             AS UpdatedForenames,
  Usr.Surname                               AS UpdatedSurname
FROM 
  SkillsCourseQuestion
    LEFT JOIN SkillsCourseStudentAnswer ON
	  SkillsCourseStudentAnswer.SkillsCourseQuestionID = SkillsCourseQuestion.ID  AND 
	  SkillsCourseStudentAnswer.OGP_StudentID          = @StudentID               AND 
	  SkillsCourseStudentAnswer.SkillsPeriodID         = @SkillsPeriodID          
    INNER JOIN SkillsAnswerType ON 
	  SkillsCourseQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
	LEFT JOIN SkillsAnswer ON
		SkillsAnswer.ID = SkillsCourseStudentAnswer.SkillsAnswerID
	LEFT JOIN SkillsPeriod ON
		SkillsPeriod.ID = SkillsCourseStudentAnswer.SkillsPeriodID  
	LEFT JOIN [User] Usr ON
	    Usr.UserName = SkillsCourseStudentAnswer.UpdatedBy
WHERE
  --Note: we now load all Questions regardless of Obsolete (rules are applied in the Controller)
  --SkillsCourseQuestion.IsObsolete = 0          AND
  --SkillsAnswerType.IsObsolete     = 0          AND  
  SkillsCourseQuestion.CourseID      = @CourseID    AND
  SkillsCourseStudentAnswer.CourseID = @CourseID    
ORDER BY
  SkillsCourseQuestion.OrderBy

GO



ALTER PROCEDURE [dbo].[sp_WebPlus_SkillsStudentCourseQuestions_Select]
  @CourseID             INT,
  @StudentID            INT,
  @SkillsPeriodID		INT
AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 26/03/2024 
-- Modified:    AndyB 20/05/2024 Added 'SkillsCourseStudentAnswer.CourseID = @CourseID' to WHERE clause  
-- Modified:	AndyG 07/06/2024 Removed 'SkillsCourseStudentAnswer.CourseID = @CourseID' from WHERE clause  
-- Descripton:	SP to retrieve the Skills Questions and Answers for a Student and Period and Course
-- Example:     exec sp_WebPlus_SkillsStudentCourseQuestions_Select 5399, 44339, 1
-- =============================================

SELECT 
  SkillsCourseQuestion.ID                   AS QuestionID, 
  SkillsCourseQuestion.Description          AS QuestionDescription, 
  SkillsCourseQuestion.IsObsolete           AS QuestionIsObsolete, 
  SkillsAnswer.Description                  AS AnswerDescription,
  SkillsAnswer.IsObsolete                   AS AnswerIsObsolete,
  SkillsAnswerType.ID                       AS AnswerTypeID, 
  SkillsAnswerType.Description              AS AnswerTypeDescription, 
  SkillsAnswerType.IsObsolete               AS AnswerTypeIsObsolete,
  SkillsCourseStudentAnswer.ID              AS StudentAnswerID, 
  SkillsCourseStudentAnswer.AnswerText      AS AnswerText,
  SkillsCourseStudentAnswer.SkillsAnswerID  AS AnswerID, 
  SkillsPeriod.ID                           AS PeriodID, 
  SkillsPeriod.AcademicYearID               AS PeriodAcademicYearID, 
  SkillsPeriod.DefaultDescription           AS PeriodDefaultDescription, 
  SkillsPeriod.SkillsPeriodDescription      AS PeriodDescription, 
  SkillsPeriod.IsEditable                   AS PeriodIsEditable,  
  SkillsPeriod.ShowByDefaultOpenDate        AS PeriodOpenDate, 
  SkillsPeriod.ShowByDefaultCloseDate       AS PeriodCloseDate,
  SkillsCourseStudentAnswer.UpdatedBy       AS UpdatedBy,
  SkillsCourseStudentAnswer.UpdatedWhen     AS UpdatedWhen,
  Usr.Forenames                             AS UpdatedForenames,
  Usr.Surname                               AS UpdatedSurname
FROM 
  SkillsCourseQuestion
    LEFT JOIN SkillsCourseStudentAnswer ON
	  SkillsCourseStudentAnswer.SkillsCourseQuestionID = SkillsCourseQuestion.ID  AND 
	  SkillsCourseStudentAnswer.OGP_StudentID          = @StudentID               AND 
	  SkillsCourseStudentAnswer.SkillsPeriodID         = @SkillsPeriodID          
    INNER JOIN SkillsAnswerType ON 
	  SkillsCourseQuestion.SkillsAnswerTypeID = SkillsAnswerType.ID
	LEFT JOIN SkillsAnswer ON
		SkillsAnswer.ID = SkillsCourseStudentAnswer.SkillsAnswerID
	LEFT JOIN SkillsPeriod ON
		SkillsPeriod.ID = SkillsCourseStudentAnswer.SkillsPeriodID  
	LEFT JOIN [User] Usr ON
	    Usr.UserName = SkillsCourseStudentAnswer.UpdatedBy
WHERE
  --Note: we now load all Questions regardless of Obsolete (rules are applied in the Controller)
  --SkillsCourseQuestion.IsObsolete = 0          AND
  --SkillsAnswerType.IsObsolete     = 0          AND  
  SkillsCourseQuestion.CourseID      = @CourseID   -- AND
  --SkillsCourseStudentAnswer.CourseID = @CourseID    
ORDER BY
  SkillsCourseQuestion.OrderBy


GO
